Explication détaillée des algorithmes de tri Java couramment utilisés
1. Tri par sélection (SelectSort)
Principe de base : Pour un ensemble d'enregistrements donné, après le premier tour de comparaison, le plus petit enregistrement est obtenu, puis l'enregistrement est comparé à la position du premier enregistrement ; puis effectuez une deuxième comparaison sur d'autres enregistrements en excluant le premier enregistrement pour obtenir le plus petit enregistrement et échangez les positions avec le deuxième enregistrement ; répétez ce processus jusqu'à ce qu'il n'y ait qu'un seul enregistrement à comparer.
public class SelectSort { public static void selectSort(int[] array) { int i; int j; int temp; int flag; for (i = 0; i < array.length; i++) { temp = array[i]; flag = i; for (j = i + 1; j < array.length; j++) { if (array[j] < temp) { temp = array[j]; flag = j; } } if (flag != i) { array[flag] = array[i]; array[i] = temp; } } } public static void main(String[] args) { int[] a = { 5, 1, 9, 6, 7, 2, 8, 4, 3 }; selectSort(a); for (int i = 0; i < a.length; i++) { System.out.print(a[i] + " "); } } }
2. Tri par insertion (InsertSort)
Principe de base : Pour un ensemble de données donné, supposez initialement le premier Chaque enregistrement forme une séquence ordonnée et les enregistrements restants forment une séquence non ordonnée. Ensuite, à partir du deuxième enregistrement, l'enregistrement en cours de traitement est inséré dans la séquence ordonnée qui le précède dans l'ordre en fonction de la taille de l'enregistrement, jusqu'à ce que le dernier enregistrement soit inséré dans la séquence ordonnée.
public class InsertSort { public static void insertSort(int[] a) { if (a != null) { for (int i = 1; i < a.length; i++) { int temp = a[i]; int j = i; if (a[j - 1] > temp) { while (j >= 1 && a[j - 1] > temp) { a[j] = a[j - 1]; j--; } } a[j] = temp; } } } public static void main(String[] args) { int[] a = { 5, 1, 7, 2, 8, 4, 3, 9, 6 }; // int[] a =null; insertSort(a); for (int i = 0; i < a.length; i++) { System.out.print(a[i] + " "); } } }
3. Bubble Sort (BubbleSort)
Principe de base : Pour un n enregistrements donné, commencer par le premier L'enregistrement démarre pour comparer deux enregistrements adjacents en séquence. Lorsque l'enregistrement précédent est plus grand que l'enregistrement ultérieur, les positions sont permutées. Après un tour de comparaison et de transposition, l'enregistrement le plus grand parmi les n enregistrements sera situé à la nième position. les premiers (n-1) enregistrements subissent un deuxième cycle de comparaison ; le processus est répété jusqu'à ce qu'il ne reste qu'un seul enregistrement à comparer.
public class BubbleSort { public static void bubbleSort(int array[]) { int temp = 0; int n = array.length; for (int i = n - 1; i >= 0; i--) { for (int j = 0; j < i; j++) { if (array[j] > array[j + 1]) { temp = array[j]; array[j] = array[j + 1]; array[j + 1] = temp; } } } } public static void main(String[] args) { int a[] = { 45, 1, 21, 17, 69, 99, 32 }; bubbleSort(a); for (int i = 0; i < a.length; i++) { System.out.print(a[i] + " "); } } }
4. MergeSort (MergeSort)
Principe de base : utiliser la récursivité et la technologie diviser pour régner pour diviser la séquence de données. en de plus en plus Plus la demi-sous-liste est petite, la demi-sous-liste est triée, et enfin la demi-sous-liste triée est fusionnée en une séquence ordonnée de plus en plus grande en utilisant une méthode récursive. Pour un ensemble d'enregistrements donné (en supposant un total de n enregistrements), fusionnez d'abord toutes les deux sous-séquences adjacentes de longueur 1 pour obtenir n/2 (arrondies à l'unité supérieure) sous-séquences ordonnées de longueur 2 ou 1. sous-séquences, puis fusionnez-les deux par deux. , et répétez ce processus jusqu'à ce qu'une séquence ordonnée soit obtenue.
public class MergeSort { public static void merge(int array[], int p, int q, int r) { int i, j, k, n1, n2; n1 = q - p + 1; n2 = r - q; int[] L = new int[n1]; int[] R = new int[n2]; for (i = 0, k = p; i < n1; i++, k++) L[i] = array[k]; for (i = 0, k = q + 1; i < n2; i++, k++) R[i] = array[k]; for (k = p, i = 0, j = 0; i < n1 && j < n2; k++) { if (L[i] > R[j]) { array[k] = L[i]; i++; } else { array[k] = R[j]; j++; } } if (i < n1) { for (j = i; j < n1; j++, k++) array[k] = L[j]; } if (j < n2) { for (i = j; i < n2; i++, k++) { array[k] = R[i]; } } } public static void mergeSort(int array[], int p, int r) { if (p < r) { int q = (p + r) / 2; mergeSort(array, p, q); mergeSort(array, q + 1, r); merge(array, p, q, r); } } public static void main(String[] args) { int a[] = { 5, 4, 9, 8, 7, 6, 0, 1, 3, 2 }; mergeSort(a, 0, a.length - 1); for (int j = 0; j < a.length; j++) { System.out.print(a[j] + " "); } } }
5. Tri rapide (QuickSort)
Principe de base : Pour un ensemble d'enregistrements donné, après une passe de tri, divisez la séquence originale en deux parties, où tous les enregistrements de la première partie sont plus petits que tous les enregistrements de la dernière partie, puis triez rapidement les enregistrements des deux parties tour à tour et répétez le processus jusqu'à ce que tous les enregistrements de la la séquence est en ordre jusqu'à.
public class QuickSort { public static void sort(int array[], int low, int high) { int i, j; int index; if (low >= high) return; i = low; j = high; index = array[i]; while (i < j) { while (i < j && index <= array[j]) j--; if (i < j) array[i++] = array[j]; while (i < j && index > array[i]) i++; if (i < j) array[j--] = array[i]; } array[i] = index; sort(array, low, i - 1); sort(array, i + 1, high); } public static void quickSort(int array[]) { sort(array, 0, array.length - 1); } public static void main(String[] args) { int a[] = { 5, 8, 4, 6, 7, 1, 3, 9, 2 }; quickSort(a); for (int i = 0; i < a.length; i++) { System.out.print(a[i] + " "); } } }
6. Shell Sort (ShellSort)
Principe de base : divisez d'abord les éléments du tableau à trier en plusieurs sous-séquences, Le le nombre d'éléments dans chaque sous-séquence est relativement réduit, puis un tri par insertion directe est effectué sur chaque sous-séquence une fois que la séquence entière à trier est « fondamentalement ordonnée », tous les éléments sont ensuite directement insérés et triés.
public class ShellSort { public static void shellSort(int[] a) { int len = a.length; int i, j; int h; int temp; for (h = len / 2; h > 0; h = h / 2) { for (i = h; i < len; i++) { temp = a[i]; for (j = i - h; j >= 0; j -= h) { if (temp < a[j]) { a[j + h] = a[j]; } else break; } a[j + h] = temp; } } } public static void main(String[] args) { int a[] = { 5, 4, 9, 8, 7, 6, 0, 1, 3, 2 }; shellSort(a); for (int j = 0; j < a.length; j++) { System.out.print(a[j] + " "); } } }
7. Tri minimum du tas (MinHeapSort)
Principe de base : Pour un n enregistrements donnés, placez-les initialement L'enregistrement est considéré comme un arbre binaire stocké séquentiellement, puis ajusté dans un petit tas supérieur, puis après avoir échangé le dernier élément du tas avec l'élément supérieur du tas, le dernier élément du tas est alors l'enregistrement minimum (n - ; 1) les éléments sont réajustés dans un petit tas supérieur, puis l'élément supérieur du tas est échangé avec le dernier élément du tas actuel pour obtenir le plus petit enregistrement suivant. Répétez ce processus jusqu'à ce qu'il ne reste qu'un seul élément dans le tas. tas ajusté L'élément est l'enregistrement maximum, et une séquence ordonnée peut être obtenue à ce moment.
public class MinHeapSort { public static void adjustMinHeap(int[] a, int pos, int len) { int temp; int child; for (temp = a[pos]; 2 * pos + 1 <= len; pos = child) { child = 2 * pos + 1; if (child < len && a[child] > a[child + 1]) child++; if (a[child] < temp) a[pos] = a[child]; else break; } a[pos] = temp; } public static void myMinHeapSort(int[] array) { int i; int len = array.length; for (i = len / 2 - 1; i >= 0; i--) { adjustMinHeap(array, i, len - 1); } for (i = len - 1; i >= 0; i--) { int tmp = array[0]; array[0] = array[i]; array[i] = tmp; adjustMinHeap(array, 0, i - 1); } } public static void main(String[] args) { int[] a = { 5, 4, 9, 8, 7, 6, 0, 1, 3, 2 }; myMinHeapSort(a); for (int i = 0; i < a.length; i++) { System.out.print(a[i] + " "); } } }
Ce qui précède est l'intégralité du contenu de cet article. J'espère que le contenu de cet article pourra apporter une certaine aide aux études ou au travail de chacun, et. J'espère également votre soutien. Site Web PHP chinois !
Pour des explications plus détaillées sur les algorithmes de tri Java couramment utilisés et les articles connexes, veuillez faire attention au site Web PHP 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)

Sujets chauds

Cet article analyse les quatre premiers cadres JavaScript (React, Angular, Vue, Svelte) en 2025, en comparant leurs performances, leur évolutivité et leurs perspectives d'avenir. Alors que tous restent dominants en raison de fortes communautés et écosystèmes, leur populaire relatif

Cet article aborde la vulnérabilité CVE-2022-1471 dans SnakeyAml, un défaut critique permettant l'exécution du code distant. Il détaille comment la mise à niveau des applications de démarrage de printemps vers SnakeyAml 1.33 ou ultérieurement atténue ce risque, en soulignant cette mise à jour de dépendance

L'article examine la mise en œuvre de la mise en cache à plusieurs niveaux en Java à l'aide de la caféine et du cache de goyave pour améliorer les performances de l'application. Il couvre les avantages de configuration, d'intégration et de performance, ainsi que la gestion de la politique de configuration et d'expulsion le meilleur PRA

Le chargement de classe de Java implique le chargement, la liaison et l'initialisation des classes à l'aide d'un système hiérarchique avec Bootstrap, Extension et Application Classloaders. Le modèle de délégation parent garantit que les classes de base sont chargées en premier, affectant la classe de classe personnalisée LOA

Iceberg, un format de table ouverte pour les grands ensembles de données analytiques, améliore les performances et l'évolutivité du lac Data. Il aborde les limites du parquet / orc par le biais de la gestion interne des métadonnées, permettant une évolution efficace du schéma, un voyage dans le temps, un W simultanément

Node.js 20 améliore considérablement les performances via des améliorations du moteur V8, notamment la collecte des ordures et les E / S plus rapides. Les nouvelles fonctionnalités incluent une meilleure prise en charge de Webassembly et des outils de débogage raffinés, augmentant la productivité des développeurs et la vitesse d'application.

Cet article explore les méthodes de partage des données entre les étapes du concombre, la comparaison du contexte de scénario, les variables globales, le passage des arguments et les structures de données. Il met l'accent

Cet article explore l'intégration de la programmation fonctionnelle dans Java à l'aide d'expressions Lambda, de flux API, de références de méthode et facultatif. Il met en évidence des avantages tels que l'amélioration de la lisibilité au code et de la maintenabilité grâce à la concision et à l'immuabilité
