PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Radixsort/Bucketsort in Delphi


Gast
2007-01-22, 21:42:34
Hat jemand eine Ahnung wie ich dieses Algorithmus für Strings umbaue? Bei Wikipedia wird das ganze Anhand von Integer-Werten gemacht. Nur wie soll das denn mit Array of String laufen?

Bisher bin ich soweit gekommen: Das ganze funktioniert halt nur mit Char von einem String. Ziel ist aber das Sortieren eines String Array mit diesem Algo!!! Kein anderer!


procedure sort(var src, dst: string);
var
m : array[char] of integer;
i : integer;
c : char;
begin
fillchar(m, sizeof(m), 0);
for i := 1 to length(src) do
inc(m[src[i]]);
dst := '';
for c := #0 to #255 do
while m[c] > 0 do
begin
dst := dst + c;
dec(m[c]);
end;
end;

Trap
2007-01-22, 22:48:58
Bucketsort funktioniert fast genauso, du brauchst nur zusätzlich eine ordnungserhaltende Abbildung von Strings auf Integer.

Radixsort ist was komplett anderes als du gepostet hast.

Eine fertige Lösung werd ich nicht posten ;)

Gast
2007-01-22, 23:05:46
Wenn ich mal wüsste wie ich das machen...

procedure TForm1.BucketSort;
var
i,x : integer;
begin
for i:=0 to Anzahl do Feld2[i]:=0;
for i:=0 to Anzahl do Feld2[Feld[i]]:=Feld2[Feld[i]] + 1 <--- IMMER ACCESS VIOLATION WIESO?
x:=0;
for i:=0 to Anzahl do begin
while (Feld2[i]>0) do begin
Feld[x]:=i;
dec(Feld2[i]);
x:=x+1;
end;
end;

Ich lass es mit den Strings, aber nun gehts nicht! Das ist der algo von Wikipedia! Immer ACCESS Violation bei der Zuweisung....