Forum: Object-Pascal / Delphi-Language
Delphi
by Union,
13. Mär 2008
Das ist ja auch klar, war ja nur eine Vermutung von alzaimar die eben so nicht zutraf. Und Du hast Recht, Cardinal wäre sowieso besser in dem Fall, falls man mal ein Array hat das mehr Elemente als $EFFF FFFF hat. Wer weiss was dann mit den Typecasts passiert und der Addressierung. Aber bei 4 Milliarden strings verwendet man auch keinen Quicksort mehr ;) Da könnte man ja die Namen der halben...
Forum: Object-Pascal / Delphi-Language
Delphi
by Union,
13. Mär 2008
D.h. fast doppelt so schnell, sauber. Ich habe zwar einen Funktionstest gemacht aber nicht geprüft ob der Code jetzt auch wirklich richtig sortiert...
Forum: Object-Pascal / Delphi-Language
Delphi
by Union,
13. Mär 2008
Das ist dem Shr vollkommen piepegal, der schiebt einfach. Und selbst wenn, bei einem statischen Array kann man ja theoretisch sowas machen:
TArrayFromHell = array of string;
Hier gehts aber um ein dynamisches Array was zu sortieren ist, und die fangen doch in Delphi bei 0 an?
Forum: Object-Pascal / Delphi-Language
Delphi
by Union,
13. Mär 2008
Und hier das überarbeitete durch kcx von Derek van Daal entwendete Meisterwerk...
procedure QuickSort(var Strings: TStringArray; Start, Stop: Integer);
var
Left: Integer;
Right: Integer;
Mid: Integer;
Pivot: string;
// Temp: string;
PTemp : integer;
begin
Forum: Object-Pascal / Delphi-Language
Delphi
by Union,
13. Mär 2008
Nein, ich habe nur das Quicksort gemessen. Testschleife (LoadFromFile aus einer Textdatei, füllen des Arrays) ist nicht mitgemessen. Ich mache immer 3 gleiche Aufrufe mit den selben Daten (~25000 Strings).
Hier die Ergebisse wenn man die zweite rekursive Zeile entfernt und durch ein repeat ersetzt. Die Funktion ist wieder langsamer, wird dafür aber weniger durch sich selbst aufgerufen!...
Forum: Object-Pascal / Delphi-Language
Delphi
by Union,
13. Mär 2008
Ne, den Code hab ich in im CPU Fenster mit eingeschalteter Optimierung verifiziert! Und folgendes gemessen:
Aufrufe Dauer Gesamt
Original 77,163 1.257 μs 96.986 ms
Shr 1 77,163 0.958 μs 73.909 ms
Also fast 25% schneller nur durch Änderung in shr.
Forum: Object-Pascal / Delphi-Language
Delphi
by Union,
13. Mär 2008
Das ist doch schon mal ganz nett. Eine Sache die sofort auffällt (und den Code hast Du nicht selbst geschrieben, sondern wie 1000 andere arme von irgendwoher kopiert), ist das div 2. Und das ist bis zu doppelt so langsam wie shr 1:
// Div 2
mov edx, eax
sar edx,1
jns +$03
adc edx,$00// Shr 1
mov ecx,eax
shr ecx,1
Das hat jetzt zwar nix mit den Strings zu tun, aber wird bei Dir...
Forum: Object-Pascal / Delphi-Language
Delphi
by Union,
13. Mär 2008
Hast Du denn gemessen ob dies wirklich der Flaschenhals ist in diesem Quicksort?