Description du problème : Dans le cas d'une commande ou d'une commande, le nombre de tris rapides est le plus grand, soit n-1 fois.
Mais que se passe-t-il si le nombre minimum de fois dans le meilleur des cas est requis ?
Analyse du problème : donner d'abord la formule récursive
Il est stipulé que lorsque le nombre d'éléments dans la séquence à trier est n ≤ 1, aucun tri n'est nécessaire
Alors k(1)=0 k(2)=1 fois
en conclusion:
Alors k(3) = k(1) + k(1) +1 = 1 voyage
k(4) = k(1)+k(2)+1 = 2 fois
k(5) = k(1) + k(3) +1 = 2 passes au lieu de k(5) = k(2) + k(2) +1 = 3 passes
k(6)= k(2)+k(3)+1= 3 fois
Pseudocode dans le livre de Wang Haiyan
En prenant le premier élément de la séquence comme référence, laissez le premier élément de la séquence restante être i , et le suivant du dernier élément être j.
tandis que (i <= j )时{
Le pointeur i continue de se déplacer vers la droite jusqu'à ce qu'il rencontre un élément plus grand que la base , puis s'y arrête.
Le pointeur j continue de se déplacer vers la gauche jusqu'à ce qu'il rencontre un élément plus petit que le repère , puis s'y arrête.
}
Echangez la position de l'élément de référence et de l'élément pointé par j
- k(3) = 1 passe de vérification :
Séquence initiale : 5 3 4
position initiale | je | j | |||
séquence | 5 | 3 | 4 | ||
Résultats du premier cours | 3 | 4 | 5 |
Le premier processus de voyage :
j se déplace vers la gauche et s'arrête en 4, i se déplace vers la droite et s'arrête en 4, puis, l'élément de référence 5 et le 4 pointé par j échangent leurs positions.
- k(5) = 2 passes de vérification
Séquence initiale : 3 2 5 4 6
position initiale | je | j | ||||
séquence | 3 | 2 | 5 | 4 | 6 | |
premiers résultats de voyage | 2 | 3 | 5 | 4 | 6 | |
résultat du deuxième voyage | 2 | 3 | 4 | 5 | 6 |
Le processus de première passe : le pointeur i se déplace vers la droite pour pointer vers 5, j se déplace vers la gauche pour pointer vers 2, à ce moment j < i, sortir de la boucle, puis la référence (3) est échangée avec l'élément ( 2) pointé par j, le résultat : 2 3 5 4 6
La deuxième passe : 3 est déjà la position finale, et la sous-séquence de gauche n'a qu'un seul élément 2, qui n'a pas besoin d'être trié, tandis que la sous-séquence de droite { 5 4 6 } lance un tri rapide récursif, le processus se réfère à k(3 ),
Le résultat final du tri est 2 3 4 5 6