Gesehen, aber nichts bei gedacht
Lasse eine Testreihe laufen... melde mich gleich wieder.
***
So... also nachdem ich komische Ergebnisse hatte, hab' ich gleich mal eine Test-Datei erstellt:
500.000 Random-Lines A-Z (variable Länge 1-20 Zeichen), zusätzlich ubel, Ubel, übel & Übel um DIN-Sortierung zu testen. Die Datei ist in der Anlage (ausgepackt knapp 6 MB).
Zuvor hatte ich ja ein 600.000 Zeilen starkes Wörterbuch, das aber A-Z vor a-z sortiert hatte (ich sortierte gleich Case Insensitive, weshalb das gut zum Testen war). Die Werte der neuen Datei schmettern mich aber nieder...
Code:
SorterTestFile himitsu(1) himitsu(2) alzaimar(3) satty(4) TList.Sort(5)
Prefetch=0 24781 ms 36641 ms 1735 ms 24968 ms 2515 ms
Prefetch=4 17937 ms 29672 ms 1706 ms 18791 ms
Prefetch=8 17171 ms 28516 ms 1757 ms 17328 ms
Prefetch=16 14797 ms 26344 ms 1735 ms 15172 ms
Prefetch=1024 14110 ms 26000 ms 1765 ms 14438 ms
Wörterbuch 8,5 MB
Prefetch=1024 8375 ms 22125 ms 3156 ms 6750 ms 3640 ms
(1) TempSize 128 Byte,
API-Funktionen
(2) TempSize 64 KB
(3) csSkipList, Keine DIN-Sortierung möglich! Vorerst noch disqualifiziert wegen cheaten.
(4) QuickInsertSort, relativ hoher Speicherbedarf
(5) Einfach aber auch großer Speicherbedarf, Ignoriert PrefetchSize
Jetzt muss man dazu sagen, das TList.Sort als Speicherliste schlechter sortiert. Boden geht hier wohl beim Laden aus der Datei verloren (TList läd' ja einfach alles rein).
Die Klasse csSkipList bekomme ich nicht zum
Ansi-Sortieren. Blicke bei dem Teil immer noch nicht ganz durch, aber denke das es eine Binäre Einordnung der Strings braucht (AnsiCompareStr oder AnsiUpperCase bricht mit Zugriffsverletzung ab.. in Insert wählt der Code irgendwann einen Node.ndKey mit Wert NIL als Vergleichs-String).
PS: Das 64 K TempSize langsamer ist, ist kein Fehler... kannst ja jetzt selber testen...
€: Werte SkipList korrigiert (war noch ignoreDuplicates=True), ändert aber nicht viel...