Aperçu
Le tri rapide est un algorithme de tri développé par Tony Hall. Dans la situation moyenne, l'ordre de n éléments nécessite une comparaison de (nlogn). En fait, le tri rapide est généralement considérablement plus rapide que les autres algorithmes ο (NLOGNG), car sa boucle intérieure peut être mise en œuvre efficacement sur la plupart des architectures, et dans la plupart des données du monde réel, il peut déterminer le choix de la conception et réduire la possibilité de termes quadratiques qui nécessitent du temps.
Tri rapide, divisez les enregistrements à régler en deux parties indépendantes à travers un ordre, où les mots clés de certains enregistrements sont plus petits que les mots clés de l'autre partie, puis les deux enregistrements sont restés triés séparément pour atteindre le but de commander la séquence entière.
Illustration d'image:
étape
Lors de la sélection d'un élément de référence, le premier élément ou le dernier élément est généralement sélectionné pour diviser les enregistrements à tri en deux parties indépendantes à travers un sort, où les valeurs d'élément de certains enregistrements sont plus petites que les valeurs d'élément de référence. Les éléments enregistrés dans l'autre partie sont supérieurs à la valeur de référence. À l'heure actuelle, les éléments de référence sont en position correcte après leur tri, puis les deux parties des enregistrements continuent d'être triées de la même manière jusqu'à ce que toute la séquence soit commandée.
Exemple
Données brutes:
3 5 2 6 2
Sélectionnez 3 comme référence
Le premier tour
De droite à gauche pour trouver quelque chose de plus de moins que 3, 2 correspondances et ajuster 2 et 3 2 5 2 6 3 une fois, et la direction de la recherche est inversée, de gauche à droite pour trouver quelque chose de plus de plus de 3, 5 correspondances, et ajuster 2 3 2 6 5 puis de droite à gauche pour trouver quelque chose de plus petit que 3, 2 correspondances, et ajuster 2 2 3 6 5 une extrémité ronde
Round 2
La même méthode que ci-dessus est effectuée pour [2 2] et 2 2 3 6 5
Le troisième tour
La même méthode que ci-dessus est effectuée pour [6 5] et 2 2 3 5 6
Résultat final
2 2 3 5 6
Implémentation du code (Java)
package com.coder4j.main.arithmetic.sortant; classe publique Quick {private static int Mark = 0; / ** * Méthode d'échange auxiliaire * * @param array * @param a * @param b * / private static void swap (int [] array, int a, int b) {if (a! = B) {int temp = array [a]; array [a] = array [b]; Array [b] = temp; // Trouvez la correspondance, Switch System.out.println ("shift" + array [a] + "et" + array [b] + ", get"); pour (int i: array) {System.out.print (i + ""); } System.out.println (); }} / ** * Nouveau tour de séparation * * @param array * @param low * @param high * @return * / private static int partition (int array [], int low, int high) {int base = array [low]; Mark ++; System.out.println ("Throwth in Progress" + Mark + "Séparation des roues, zone:" + Low + "-" + High); while (low <high) {while (Low <high && array [high]> = base) {high--; System.out.println ("de droite à gauche pour trouver le rapport" + base + "Small, changement de pointeur:" + Low + "-" + High); } swap (tableau, bas, haut); while (Low <High && array [Low] <= base) {Low ++; System.out.println ("De gauche à droite pour trouver le rapport" + base + "grand, changement de pointeur:" + Low + "-" + High); } swap (tableau, bas, haut); } return bas; } / ** * Tri rapide du tableau, appelez récursivement * * @param array * @param low * @param height * @return * / private static int [] Quicksort (int [] array, int low, int height) {if (low <hauteur) {int division = partition (array, bas, hauteur); Quicksort (tableau, bas, division - 1); Quicksort (tableau, division + 1, hauteur); } Return Array; } / ** * Quick Sort * * @param array * @return * / public static int [] tri (int [] array) {return Quicksort (array, 0, array.length - 1); } public static void main (String [] args) {int [] array = {3, 5, 2, 6, 2}; int [] trid = tri (array); System.out.println ("résultat final"); pour (int i: tri) {System.out.print (i + ""); }}}Résultats de la sortie de test:
Sélectionnez tout et placez-le dans les notes. Le premier cycle de séparation est en cours de réalisation. Zone: 0-4. Le deuxième cycle de réglages est de 2 et 3. Le deuxième cycle de séparation est 2 5 2 6 3. Le deuxième cycle de séparation est de 3 et 5. Le deuxième cycle de séparation est 2 et 3. Le deuxième cycle de séparation est 2 et 3. Le deuxième cycle de séparation est 2 et 3. Le deuxième tour de la séparation est 2 et 3. La deuxième ronde de la séparation est 2 et 3. La séparation est 2 et 3. Le deuxième cycle de séparation est 2 et 3. Le deuxième cycle de séparation est 2 et 3. Le deuxième cycle de séparation est 2 et 2. 5. Le dernier cycle de séparation est 2 sont 2 et 3 sont 5. Le dernier résultat est que 2 sont 2 et 3 sont 5. 6. Le dernier résultat est 2 2 3 5. 6.
Après les tests, il est cohérent avec les résultats de l'exemple.