Durchschnittliche Zeit, die Komplexität von quicksort vs insertion sort
Ich bin führen um zu glauben, dass quick sort, sollte Sie schneller als insertion sort auf eine mittlere Größe unorderd int-array. Ich habe beide algorithmen implementiert in java und ich merke quicksort ist deutlich langsamer als insertion sorrt.
Habe ich eine Theorie: quiksort wird langsamer, weil es die rekursive und die nennen es so, um es der eigenen Signatur der Methode ist ziemlich langsam in der JVM, die ist, warum meine timer gibt viel höhere Messwerte als ich erwartet hatte, in der Erwägung, dass die insertion nicht rekursiven und alle thwe Arbeit erfolgt innerhalb einer Methode, so dass Sie die JVM nicht zu tun, jede zusätzliche Routinearbeit? amirite?
- Ich habe eine harte Zeit, Kauf die Behauptung, dass quicksort ist langsamer als insertion sort. Zeigen Sie Ihren code.
- Warum bei kleineren Datensätzen, quicksort ist langsamer als insertion sort.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie daran interessiert, diese Sortier-Algorithmus-Animationen.
Wahrscheinlich nicht, es sei denn, Ihre rekursive Methoden, die machen sich keine großen Mittel. Seine eher es ist eine Eigenart in Ihren code oder Ihre Daten-set ist klein.
JVM sollte keine Probleme mit rekursiven Aufrufe.
Es sei denn, du hast einen Treffer von Quicksort die pathologischen Fällen (oft, eine Liste, die bereits sortiert ist), Quicksort werden sollte O(n log n) — deutlich schneller als insertion sort ist O(n^2) als n erhöht.
Den Sie verwenden möchten, können merge-sort oder heap-sort statt; Sie haben keine pathologischen Fälle. Sie sind beide O(n log n).
(Wenn ich diese vor langer Zeit in C++ quicksort schneller als insertion sort, mit einer ziemlich kleinen ns. Radix ist bemerkenswert schneller mit mid-size ns auch.)
theoretisch Quick Sort, sollten die arbeiten schneller als insertion sort für zufällige Daten, die von mittlerer bis großer Größe.
Ich denke, die Unterschiede sollten in der Weise QS umgesetzt wird:
pivot-Auswahl für die angegebenen Daten ?(3-median ist ein besserer Ansatz)
mit dem gleichen Swap-Mechanismus für QS und insertion sort ?
ist die random-input-enuf, ich.e ., wenn Sie Cluster von bestellten Daten Leistung
leiden.
Habe ich diese übung in C und Ergebnisse sind in übereinstimmung mit der Theorie.
Eigentlich für kleine Wert von n insertion sort ist besser als schnellen Sorte. Für kleine Wert von n statt n^2 oder nlogn die Zeit hängt eher konstant.
Den schnellsten Implementierungen von quicksort mit Schleifen statt Rekursion. Rekursion ist in der Regel nicht sehr schnell.
Müssen Sie vorsichtig sein, wie Sie die rekursive Aufrufe, und da es Java ist, können nicht Sie verlassen sich auf tail-calls optimiert, so sollten Sie wahrscheinlich zu verwalten, Ihre eigenen Stapel für die Rekursion.
Alles, was verfügbar ist, um bekannt sein über quicksort vs insertion sort kann sein gefunden in Bob Sedgewick seiner dissertation. Das boiled-down-version kann sein gefunden in seinen algorithmen Lehrbücher.
Ich erinnere mich, dass in der Schule, wenn wir nicht Sortieren in Java würden wir das eigentlich tun, ein hybrid der beiden. Also für resursive algorithmen wie quicksort und mergesort, würden wir eigentlich tun, insertion sort für Segmente, die waren sehr klein, sagen wir 10 Einträge oder so.
Rekursion ist langsam, so verwenden Sie es mit Sorgfalt. Und wie zuvor festgestellt wurde, wenn Sie kann herausfinden, einen Weg für die Implementierung des gleichen Algorithmus in einem iterativen Mode, dann tun Sie das.
Gibt es drei Dinge zu beachten hier. Erste, insertion sort ist viel schneller (O(n) vs O(n log n)) als quicksort, WENN die Datei bereits sortiert ist, oder fast so; das zweite, wenn der Datensatz sehr klein ist, wird die "start-up-Zeit" eingerichtet, die quicksort, finden Sie eine pivot Punkt, und so weiter, dominiert den rest; und drittens, Quicksort ist ein wenig subtiler, möchten Sie vielleicht, um re-Lesen Sie den code nach einer Nacht Schlaf.
Wie sind Sie mit der Auswahl Ihrer pivot bei Quicksort?
Diese einfache Tatsache ist der Schlüssel zu deiner Frage, und wahrscheinlich der Grund, warum Quicksort langsamer ausgeführt wird. In Fällen wie diesem ist es eine gute Idee, post mindestens die wichtigsten Abschnitte Ihres Codes, wenn Sie suchen für einige echte Hilfe.
Eigentlich für kleine Wert von n Einfüge-Typ ist gesünder als der schnelle Typ. Für kleine Wert von n statt n^2 oder nlogn die Zeit hängt sehr viel konstanter.
Web-Entwicklung Indianapolis