algorithme de tri de structure de données Java (2) tri par fusion
Cet article présente principalement le tri par fusion de l'algorithme de tri des structures de données Java. Il analyse en détail les principes, les techniques de mise en œuvre et les précautions associées du tri par fusion sur la base d'exemples spécifiques. Les amis dans le besoin peuvent se référer à cet article
L'exemple décrit le tri par fusion de l'algorithme de tri des structures de données Java. Partagez-le avec tout le monde pour votre référence, les détails sont les suivants : Les types de tri mentionnés ci-dessus organisent tous un groupe d'enregistrements dans une séquence ordonnée en fonction de la taille des mots-clés et de l'idée de le tri par fusion est : basé sur la fusion, fusionne deux ou plusieurs listes ordonnées dans une nouvelle liste ordonnéeAlgorithme de tri par fusion : Supposons que la séquence initiale contient n enregistrements, Tout d'abord, traitez ces n enregistrements comme n sous-séquences ordonnées, chaque sous-séquence a une longueur de 1, puis fusionnez-les par paires pour obtenir n/2 longueurs de 2 (lorsque n est un nombre impair, la longueur de la dernière séquence est 1 ) sous-séquence ordonnée. Sur cette base, les sous-séquences ordonnées de longueur 2 sont fusionnées brillamment pour obtenir plusieurs sous-séquences ordonnées de longueur 4. Répétez cette opération jusqu'à ce qu'une séquence ordonnée de longueur n soit obtenue. Cette méthode est appelée : tri par fusion bidirectionnel (l'opération de base consiste à fusionner deux sous-séquences ordonnées adjacentes dans la séquence à trier en une séquence ordonnée).
Le code d'implémentation de l'algorithme est le suivant :
package exp_sort; public class MergeSort { /** * 相邻两个有序子序列的合并算法 * * @param src_array * @param low * @param high * @param des_array */ public static void Merge(int src_array[], int low, int high, int des_array[]) { int mid; int i, j, k; mid = (low + high) / 2; i = low; k = 0; j = mid + 1; // compare two list while (i <= mid && j <= high) { if (src_array[i] <= src_array[j]) { des_array[k] = src_array[i]; i = i + 1; } else { des_array[k] = src_array[j]; j = j + 1; } k = k + 1; } // if 1 have,cat while (i <= mid) { des_array[k] = src_array[i]; k = k + 1; i = i + 1; } while (j <= high) { des_array[k] = src_array[j]; k = k + 1; j = j + 1; } for (i = 0; i < k; i++) { src_array[low + i] = des_array[i]; } } /** * 2-路归并排序算法,递归实现 * * @param src_array * @param low * @param high * @param des_array */ public static void mergeSort(int src_array[], int low, int high, int des_array[]) { int mid; if (low < high) { mid = (low + high) / 2; mergeSort(src_array, low, mid, des_array); mergeSort(src_array, mid + 1, high, des_array); Merge(src_array, low, high, des_array); } } public static void main(String[] args) { // TODO Auto-generated method stub int array1[] = { 38, 62, 35, 77, 55, 14, 35, 98 }; int array2[] = new int[array1.length]; mergeSort(array1, 0, array1.length - 1, array2); System.out.println("\n----------after sort-------------"); for (int ii = 0; ii < array1.length; ii++) { System.out.print(array1[ii] + " "); } System.out.println("\n"); } }
Explication du code :
Dans le tri par fusion, une passe de fusion nécessite plusieurs appels à l'algorithme de fusion bidirectionnelle. La complexité temporelle d'une passe de fusion est O(n). Parce qu'au plus n-1 comparaisons sont effectuées, où n est le nombre total d'éléments. S'il y a plusieurs nombres, c'est-à-dire lorsque n n'est pas 1, fusionnez et triez de manière récursive la première moitié des données et la seconde moitié des données pour obtenir les deux parties des données triées, puis fusionnez-les ensemble.Analyse d'algorithme :
Cet algorithme est basé sur l'opération de fusion (également appelée algorithme de fusion, qui fait référence au processus de combinaison de deux séquences triées Un algorithme de tri efficace basé sur l'opération de fusion dans une séquence). Cet algorithme est une application très typique de laméthode diviser et conquérir (pide and Conquer). Il divise le problème en quelques petits problèmes puis les résout de manière récursive, et l'étape de conquête est résolue en divisant l'étape divisée. Chaque réponse s'emboîte ; diviser pour régner est une utilisation très puissante de la récursivité. Remarque : Par rapport au tri rapide et au tri par tas, la plus grande caractéristique du tri par fusion est qu'il s'agit d'une méthode de tri stable . La vitesse est juste derrière le tri rapide, et elle est généralement utilisée pour les tableaux généralement désordonnés mais dont les sous-éléments sont relativement ordonnés.
Complexité :
La complexité temporelle est :O(nlogn) - Cet algorithme est le meilleur et le plus efficace. Mauvais et la performance temporelle moyenne. La complexité spatiale est :
O(n)Le nombre d'opérations de comparaison est compris entre (nlogn) / 2 et nlogn - n + 1.
Le nombre d'opérations d'affectation est de (2nlogn). La complexité spatiale de l'algorithme de fusion est : 0 (n)
Il est difficile à utiliser pour le tri de la mémoire principale (le tri par fusion prend plus de mémoire. Le problème principal est que la fusion de deux tables triées nécessite une mémoire supplémentaire linéaire, ce qui coûte également de l'argent dans tout l'algorithme. Certaines opérations supplémentaires telles que copier des données dans un
tableau temporaire puis les recopier ralentiront sérieusement le tri) mais elles sont très efficaces et sont principalement utilisées pour le tri externe et pour des tâches importantes. les applications de tri internes, choisissent généralement le tri rapide.
Les étapes de l'opération de fusion sont les suivantes :
Étape 1 : Demander de l'espace pour que sa taille soit la somme des deux séquences triées. L'espace est utilisé pour stocker la séquence fusionnéeÉtape 2 : Définir deux pointeurs, les positions initiales sont les positions de départ des deux séquences triées
Étape 3 : Comparez les éléments pointés par les deux pointeurs, Sélectionnez un élément relativement petit et placez-le dans l'espace de fusion, puis déplacez le pointeur vers la position suivante
Répétez l'étape 3 jusqu'à ce qu'un certain pointeur atteigne la fin de la séquence
Copiez directement tous les éléments restants de l'autre séquence jusqu'à la fin de la séquence de fusion
Les étapes du tri par fusion sont les suivantes (en supposant que la séquence comporte n éléments au total) :
Fusionner tous les deux nombres adjacents dans la séquence (merge), formant des séquences floor(n/2), chaque séquence contient deux éléments après le tri Fusionner à nouveau les séquences ci-dessus, formant des séquences floor(n/4), chaque séquence en contient quatre éléments
Répétez l'étape 2 jusqu'à ce que tous les éléments soient triés
Algorithme de tri de structure de données Java (1) Tri par sélection d'arbre.
2.Tutoriel détaillé sur Selection Sort_java en Java
3Algorithme de tri de structure de données Java (3) Tri par sélection simple.
4. algorithme de tri de structure de données Java (4) tri par sélection
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Guide du nombre parfait en Java. Nous discutons ici de la définition, comment vérifier le nombre parfait en Java ?, des exemples d'implémentation de code.

Guide de Weka en Java. Nous discutons ici de l'introduction, de la façon d'utiliser Weka Java, du type de plate-forme et des avantages avec des exemples.

Guide du nombre de Smith en Java. Nous discutons ici de la définition, comment vérifier le numéro Smith en Java ? exemple avec implémentation de code.

Dans cet article, nous avons conservé les questions d'entretien Java Spring les plus posées avec leurs réponses détaillées. Pour que vous puissiez réussir l'interview.

Java 8 présente l'API Stream, fournissant un moyen puissant et expressif de traiter les collections de données. Cependant, une question courante lors de l'utilisation du flux est: comment se casser ou revenir d'une opération FOREAK? Les boucles traditionnelles permettent une interruption ou un retour précoce, mais la méthode Foreach de Stream ne prend pas directement en charge cette méthode. Cet article expliquera les raisons et explorera des méthodes alternatives pour la mise en œuvre de terminaison prématurée dans les systèmes de traitement de flux. Lire plus approfondie: Améliorations de l'API Java Stream Comprendre le flux Forach La méthode foreach est une opération terminale qui effectue une opération sur chaque élément du flux. Son intention de conception est

Guide de TimeStamp to Date en Java. Ici, nous discutons également de l'introduction et de la façon de convertir l'horodatage en date en Java avec des exemples.

Les capsules sont des figures géométriques tridimensionnelles, composées d'un cylindre et d'un hémisphère aux deux extrémités. Le volume de la capsule peut être calculé en ajoutant le volume du cylindre et le volume de l'hémisphère aux deux extrémités. Ce tutoriel discutera de la façon de calculer le volume d'une capsule donnée en Java en utilisant différentes méthodes. Formule de volume de capsule La formule du volume de la capsule est la suivante: Volume de capsule = volume cylindrique volume de deux hémisphères volume dans, R: Le rayon de l'hémisphère. H: La hauteur du cylindre (à l'exclusion de l'hémisphère). Exemple 1 entrer Rayon = 5 unités Hauteur = 10 unités Sortir Volume = 1570,8 unités cubes expliquer Calculer le volume à l'aide de la formule: Volume = π × r2 × h (4

Java est un langage de programmation populaire qui peut être appris aussi bien par les développeurs débutants que par les développeurs expérimentés. Ce didacticiel commence par les concepts de base et progresse vers des sujets avancés. Après avoir installé le kit de développement Java, vous pouvez vous entraîner à la programmation en créant un simple programme « Hello, World ! ». Une fois que vous avez compris le code, utilisez l'invite de commande pour compiler et exécuter le programme, et « Hello, World ! » s'affichera sur la console. L'apprentissage de Java commence votre parcours de programmation et, à mesure que votre maîtrise s'approfondit, vous pouvez créer des applications plus complexes.
