Tri rapide Vs Tri par fusion [dupliquer]

cette question a déjà une réponse ici:

  • pourquoi quicksort est-il meilleur que mergesort? 29 réponses

pourquoi le Quick sort serait-il meilleur que le merge sort ?

96
demandé sur qrdl 2009-03-25 10:26:23

11 réponses

voir Quicksort sur wikipedia :

généralement, quicksort est plus rapide dans la pratique que les autres Θ(nlogn) algorithmes, parce que sa boucle interne peut être mis en œuvre efficacement sur la plupart des architectures, et dans le monde réel données, il est possible de faire la conception des choix qui minimisent la probabilité d'exiger du temps quadratique.

notez que la mémoire très faible l'exigence est un gros plus.

98
répondu Benoît 2009-03-25 07:44:39

le tri rapide est généralement plus rapide que le tri par fusion lorsque les données sont stockées en mémoire. Toutefois, lorsque l'ensemble de données est énorme et est stocké sur des périphériques externes tels qu'un disque dur, de fusion, le tri est le gagnant clair en termes de vitesse. Il minimise les lectures coûteuses du lecteur externe et se prête également bien à l'informatique parallèle.

65
répondu Michael 2010-04-08 07:35:47

pour le tri par fusion le pire cas est O(n*log(n)) , pour le tri rapide: O(n 2 ) . Pour les autres cas (avg, best) tous les deux ont O(n*log(n)) . Cependant le tri rapide est constante d'espace où le tri de fusion dépend de la structure que vous triez.

voir cette comparaison .

, Vous pouvez aussi le voir visuellement .

59
répondu Marcin Gil 2009-03-25 07:47:09

j'ai personnellement voulu tester la différence entre le tri rapide et le tri par fusion moi-même et j'ai vu les temps de fonctionnement pour un échantillon de 1.000.000 éléments.

Quick sort a pu le faire en 156 millisecondes alors que Merge sort a fait la même chose en 247 millisecondes

les données de tri rapide était, cependant, était aléatoire et tri rapide fonctionne bien si les données est aléatoire où comme ce n'est pas le cas avec fusion ie tri fusion tri effectue indépendamment de la même lorsque les données sont triées ou non. Mais le tri de fusion nécessite un espace supplémentaire complet et le tri rapide ne fait pas comme son tri en place

j'ai écrit programme de travail complet pour eux illustrera des images aussi.

11
répondu bragboy 2015-07-08 10:52:49

bien que quicksort soit souvent un meilleur choix que le sort de fusion, il y a certainement des moments où le sort de fusion est un meilleur choix. Le moment le plus évident est quand il est extrêmement important que votre algorithme tourne plus vite que O(N^2). Quicksort est généralement plus rapide que cela, mais compte tenu de la pire entrée théorique possible, il pourrait fonctionner dans O(N^2), qui est pire que la pire sorte de fusion possible.

Quicksort est aussi plus compliqué que mergesort, surtout si vous voulez écrire une implémentation vraiment solide, et donc si vous visez la simplicité et la maintenabilité, merge sort devient une alternative prometteuse avec très peu de perte de performance.

9
répondu Brandon Yarbrough 2009-03-25 07:58:43

en plus des autres: Merge sort est très efficace pour les structures de données immuables comme les listes liées et est donc un bon choix pour les langages de programmation (purement) fonctionnels.

un quicksort mal mis en œuvre peut être un risque de sécurité .

6
répondu Dario 2017-05-23 10:31:10

Quicksort est en place. Vous avez juste besoin d'échanger les positions des données pendant la fonction de partitionnement. Mergesort nécessite beaucoup plus de copie de données. Vous avez besoin d'un autre stockage temporaire (généralement la même taille que votre tableau de données original) pour la fonction de fusion.

4
répondu Peter Leong 2012-07-03 14:11:15

quicksort est nommé ainsi pour une raison,

souligne : les deux sont des sortes stables, (simplement une nuisance de mise en œuvre), alors passons aux complexités

sa très confus avec juste le big-oh notations renversé et "abusé" , les deux ont la moyenne la complexité de l'affaire de 0(nlogn) ,

mais le tri de fusion est toujours 0 ( nlogn), alors que quicksort pour les mauvaises partitions, c'est-à-dire les partitions asymétriques comme 1 élément - 10 élément (ce qui peut se produire en raison de la liste triée ou inversée ) peut conduire à un 0(N^2)..

.. et donc nous avons un quicksort aléatoire, où nous choisissons le pivot au hasard et évitons un tel partitionnement asymétrique, annulant ainsi l'ensemble du scénario n^2 quoi qu'il en soit , même pour un partitionnement modérément asymétrique comme 3-4, nous avons un nlog(7/4)n, idéalement nous voulons 1-1 partion, donc le 2 entier de O(nlog(2)n).

ainsi il est O ( nlogn), presque toujours et à la différence de fusionner trier le les constantes cachées sous la notation "big-oh" sont meilleures pour quicksort que pour mergesort ..et il n'utilise pas d'espace supplémentaire comme une sorte de fusion.

mais obtenir quicksort exécuter parfaitement exige de peaufinage ,reformuler , quicksort vous fournit des occasions de peaufiner ....

3
répondu idexi 2012-10-27 19:01:46

la réponse pencherait légèrement vers quicksort W. R. t to changes brought with DualPivotQuickSort for primitive values . Il est utilisé dans JAVA 7 pour trier dans java.util.Tableaux

It is proved that for the Dual-Pivot Quicksort the average number of
comparisons is 2*n*ln(n), the average number of swaps is 0.8*n*ln(n),
whereas classical Quicksort algorithm has 2*n*ln(n) and 1*n*ln(n)
respectively. Full mathematical proof see in attached proof.txt
and proof_add.txt files. Theoretical results are also confirmed
by experimental counting of the operations.

vous pouvez trouver L'implementation JAVA7 ici - http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/7-b147/java/util/Arrays.java

Plus Impressionnant Lecture sur DualPivotQuickSort - http://permalink.gmane.org/gmane.comp.java.openjdk.core-libs.devel/2628

3
répondu SSR 2013-04-03 14:45:26

Il n'est pas vrai que quicksort est mieux. De plus, cela dépend de ce que vous voulez dire par "mieux", "consommation de mémoire" ou "vitesse".

en termes de consommation de mémoire, dans le pire des cas, mais quicksort peut utiliser n^2 mémoire (c.-à-d. chaque partition est de 1 À n-1), tandis que merge sort utilise nlogn.

ce qui précède suit en termes de vitesse.

2
répondu Jason 2012-06-01 08:19:45

Quicksort est en place. Vous avez besoin de très peu de mémoire supplémentaire. Ce qui est extrêmement important.

le bon choix de la médiane le rend encore plus efficace mais même un mauvais choix de la médiane en quarantaine Theta (nlogn).

0
répondu DarthVader 2009-10-13 02:06:18