C: Sortiermethoden Analyse

stimmen
7

Ich habe eine Menge von verschiedenen Sortieralgorithmen, die alle die folgende Signatur haben:

void <METHOD>_sort_ints(int * array, const unsigned int ARRAY_LENGTH);

Gibt es Testsuiten für Sortierung, die ich für den Zweck, empirische Vergleiche verwenden könnte?

Veröffentlicht am 27/08/2009 um 04:52
quelle vom benutzer
In anderen Sprachen...                            


4 antworten

stimmen
7

Die endgültige Studie der Sortierung ist Bob Sedgewick ‚s Dissertation. Aber es gibt eine Menge guter Informationen in seinen Algorithmen Lehrbücher, und das sind die ersten beiden Plätze , die ich für Testsuite und Methodik aussehen würde. Wenn Sie einen aktuellen Kurs gehabt haben wissen Sie mehr als ich; letztes Mal , dass ich einen Kurs hatte, war die beste Methode quicksort bis auf Partitionen der Größe 12, dann führt Insertionsort auf dem gesamten Array zu verwenden. Aber die Antworten ändern , so schnell wie die Hardware.

Jon Bentley Programmierung Perls Bücher haben einige andere Informationen zu sortieren.

Sie können schnell eine Testsuite Peitsche enthalten

  • Zufallszahlen

  • Sortieren ganze Zahlen

  • Rückwärts sortiert ganze Zahlen

  • Sortieren ganze Zahlen, leicht gestörtes

Wenn der Speicher dient, das sind die wichtigsten Fälle für einen Sortieralgorithmus.

Wenn Sie schauen , Arrays zu sortieren , die nicht im Cache passen, müssen Sie Cache - Effekte messen. valgrindwirksam ist , wenn langsam.

Beantwortet am 27/08/2009 um 05:22
quelle vom benutzer

stimmen
3

Diese Seite zeigt die verschiedenen Sortieralgorithmen vier Gruppen mit: http://www.sorting-algorithms.com/

Zusätzlich zu den vier Gruppe in Normans Antwort möchten Sie die Sortieralgorithmen mit Sammlung von Zahlen zu überprüfen, die einige Ähnlichkeiten in den Zahlen:

  • Alle Zahlen sind einzigartig
  • Die gleiche ganze Zahl in der gesamten Kollektion
  • Nur wenige Einzigartige Keys

die Anzahl der Elemente in der Sammlung zu ändern, ist auch eine gute Übung, jeden Algorithmus mit 1K überprüfen, 1M, 1G usw. zu sehen, was die Speicher Auswirkungen dieses Algorithmus sind.

Beantwortet am 02/09/2009 um 10:51
quelle vom benutzer

stimmen
10

Diese detaillierte Diskussion sowie die Anbindung an eine große Anzahl von verwandten Webseiten , die Sie wahrscheinlich sind , nützlich zu finden, beschreibt auch einen nützlichen Satz von Eingabedaten für Sortieralgorithmen zu testen (siehe verlinkte Seite Gründe). zusammenfassend:

  1. Völlig zufällig neu gemischt Array
  2. Bereits sortiert Array
  3. Bereits in der umgekehrten Reihenfolge sortiert Array
  4. Kettensägen-Array
  5. Array identischer Elemente
  6. Bereits Array mit N Permutationen (mit N von 0,1 bis 10% der Größe) sortiert
  7. Bereits sortierten Array in umgekehrter Reihenfolge Array mit N Permutationen
  8. Daten, die Normalverteilung mit doppelten (oder schließen) Tasten (für eine stabile Sortierung nur)
  9. Pseudo-Zufallsdaten (Tageswerte von S & P500 oder anderen Index für ein Jahrzehnt könnte ein guter Test hier eingestellt sein, sie von Yahoo.com zur Verfügung stehen)
Beantwortet am 02/09/2009 um 11:10
quelle vom benutzer

stimmen
3

sortperf.py verfügt über eine gut ausgewählte Suite von Benchmark - Testfällen und wurde verwendet , um den Aufsatz gefunden zu unterstützen hier und vor Timsort DER Art in Python lo , dass viele Jahre zu machen. Beachten Sie, dass, schließlich und endlich kann Java auch Timsort bewegen, dank Josh - Block (siehe hier ), so dass ich vorstellen , dass sie ihre eigene Version der Benchmark - Testfälle geschrieben hat - aber ich kann nicht einfach einen Verweis finden zu. (Timsort, ein stabiles, anpassungsfähig, iterative natürliche mergesort Variante ist vor allem für Sprachen geeignet mit Bezug-Objekt - Semantik wie Python und Java, wo „Datenbewegung“ relativ billig [ist [da , dass alle jemals bewegt wird , sind Referenzen aka Zeiger , nicht Blobs unbegrenzter Größe ;-)]], aber Vergleiche können relativ teuer sein `da die Komplexität einer Vergleichsfunktion keine obere Schranke ist - aber dann gilt dies für jede Sprache , wo die Sortierung über einen benutzerdefinierten Vergleich kann angepasst werden oder Schlüsselextraktions function`).

Beantwortet am 06/09/2009 um 02:15
quelle vom benutzer

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more