[Quick Sort] Combien de fois n éléments doivent-ils être exécutés au moins ? --Wang Haiyan

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 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 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  

Je suppose que tu aimes

Origine blog.csdn.net/dw1360585641/article/details/128289112
conseillé
Classement