Ich schreibe gerade für die Schule eine Implementation von Radixsort. Zwar habe ich eine fertige Implementation gefunden allerdings liegt diese vom Wissenstand weit über meiner oder der meines Kurses.
Daher habe ich versucht das Verfahren mit relativ einfachen Techniken wiederzugeben, da es hierbei eh um die Demonstration nicht um die Geschwindkeit in einem Anwendungsprogramm geht.
Der zugegeben etwas wirre Code sieht derzeit so aus
Delphi-Quellcode:
procedure TSortieren.RadixSort;
var sorttil, i, j, k, l: integer;
var temp : array[0..255] of array of string; //array für alle ansichars
var len : integer;
var pos1, pos2 : integer;
begin
//da sorttil := 4; nur nach den ersten 4 Zeichen sortieren
for sorttil := 4 downto 1 do begin
//Partionierungsphase
for i := 1 to Anzahl-1 do begin
if length(Feld[i])>=sorttil then begin
pos1 := ord(Feld[i,sorttil]);
len := length(temp[pos1]);
pos2 := len-1;
if len=0 then pos2 := 0;
setlength(temp[pos1],len+1);
temp[pos1, pos2] := Feld[i];
end;
end;
//Sammelphase
l:=1;
j:= 0;
k:=0;
while j <= length(temp)-1 do begin
while k <= length(temp[j])-1 do begin
Feld[l] := temp[j,k];
k:=k+1;
l:=l+1;
end;
j:=j+1;
end;
end;
Anzahl ist ein vorgegebener Wert der Anzahl der Elemente im Array Feld beinhaltet(das ist etwas wirr, da die an dieser Stelle vorgegebene Implementation von Seitens meines Lehrers nicht ganz sauber ist(es gibt ein Element Feld[0] aber dies ist leer...), aber dies dürfte eigentlich keine Auswirkungen auf die grundsätzliche Ordnung haben).
Ich habe am Ende while-Schleifen verwendet weil aus mir völlig unbegreiflichen Gründen eine for-Schleife nach dem Muster
for j := 0 to length(temp)-1 do nicht bei 0 sondern bei length(temp)-1 anfing zu zählen und dann runter zählte. So gehts jetzt, ich habe kA wieso.
Für eine kurze anschauliche Beschreibung des Verfahrens siehe
hier.
Nun das Problem ist, dass die Werte nachher völlig ungeordnet sind genauso wie vorher und ich derzeit keine Idee habe woran das liegen könnte(vll übersehe ich auch einfach nur mal wieder ein Detail). Hat jmd. eine Idee? Für weitere Informationen einfach fragen.
ps:Sry wegen der etwas ungenauen Problembeschreibung.