103 Shares 8092 views

Quicksort comme méthode de programmation

En 1960, K. A. Hoar a développé une méthode pour le tri rapide des informations, est devenu le plus célèbre. Aujourd'hui, il est largement utilisé dans la programmation, car il a beaucoup de propriétés positives: il peut être utilisé pour les cas généraux, il faut une petite augmentation de la mémoire supplémentaire, compatible avec différents types de listes et faciles à mettre en œuvre. Mais il y a des inconvénients, qui a Quicksort: en utilisant le travail a permis beaucoup d'erreurs, et il est un peu instable.

Cependant, il est la version la plus étudiée. Après le premier paiement Hoare, beaucoup font son étude dense. grande base a été établi sur les questions théoriques de trouver le temps passé au travail, qui est sous-tendue par des preuves empiriques. Il y avait des propositions concrètes pour améliorer l'algorithme de base et une vitesse accrue.

Quicksort est très commun, il se trouve partout. Sur la base de la méthode est mise en œuvre TList.Sort, présente dans toutes les versions (sauf 1) Delphi, la fonction de la bibliothèque de temps il a fallu pour compléter, qsort en C ++.

Le principe de fonctionnement peut être formulé comme une « diviser pour mieux régner ». Il se produit la rupture de la liste en deux groupes et sont triés pour chaque partie par lui-même. Il en résulte que plus d'attention devrait être accordée au processus de séparation, au cours de laquelle le produit suivant: est déterminé par un élément de base et a réarrangé relativement toute sa liste. Construit à la gauche d'un groupe de candidats, dont la valeur est inférieure à toutes les autres règles de transfert. Il se trouve que l'élément principal dans la liste triée est à sa place. L'étape suivante – un défi fonctions de tri récursif pour les deux côtés des éléments par rapport à la base. Elle se termine le processus ne fonctionne que si la liste ne contient qu'un seul élément, qui doit être trié. Ainsi, afin de maîtriser une fonction de programmation comme une sorte rapide, il est nécessaire de connaître le travail des algorithmes de niveau inférieur: a) le choix de l'élément de base; b) une liste de la permutation la plus efficace pour produire deux ensembles avec des valeurs plus petites et plus grandes.

Familiariser avec premiers principes. Au moment de choisir l'élément de base, devrait idéalement être sélectionné dans la liste de la moyenne. Ensuite, sur la rupture est divisée en deux moitiés égales. Il suffit de calculer la valeur moyenne de la liste est très difficile, même si le tri le plus rapide contourne ce côté de calcul. Mais le choix de l'élément de base de la valeur maximale ou minimale – pas non plus la meilleure option. Dans le cas où une telle détermination d'un crée des listes vides seront garantis, et la seconde pleine. D'où la conclusion que l'élément de base doit être choisi qui est plus proche de la moyenne, mais au maximum et minimum.

Une fois que le choix est déterminé, vous pouvez passer à l'algorithme de décomposition. Ce soi-disant boucles internes tri rapide. Tout est construit sur deux index d'accès rapide: tout d'abord aller sur les éléments de gauche à droite, le second, au contraire, de droite à gauche. Débute l'exécution de l'opération droite: l'indice est sur la liste et comparer à la principale toutes les valeurs. Le cycle est terminé lorsque l'élément est inférieur ou égal à la ligne de base. Autrement dit, il y a une comparaison et diminue la valeur de l'indice. Sur la main gauche lorsque le travail est terminé supérieure ou égale valeur. Ici, la valeur de comparaison augmente.

A ce stade de l'algorithme de partitionnement qui comprend quicksort, deux situations peuvent se présenter. La première est que l'index sur la gauche est inférieure à droite. Cela indique une erreur, il y a des éléments sur lesquels il a été indiqué dans la liste sont dans le mauvais ordre. Sortie – changer leur place. La deuxième situation est lorsque les deux de la colonne est égale ou croisé. Ceci indique une séparation réussie de la liste, à savoir, le travail est maintenant terminé.