'loha Folks,
Mit dem folgenden Shell-Sort-Sortieralgorythmus, wird ein Array n bisschen sortiert:
Delphi-Quellcode:
Procedure ShellSort(
var arr:
array of Integer);
var
gr,b,i,c: Integer;
d : Integer;
begin
If High(arr)=1
then
begin
If arr[0] < arr[1]
then
exit
else
begin
d := arr[0];
arr[0] := arr[1];
arr[1] := d
end
end;
gr := High(arr);
b := gr
shr 1;
while b > 0
do
begin
For i := 0
to gr - b
do
begin
c := i;
while(c >= 0)
and
(arr[c] > arr[c + b])
do
begin
d := arr[c];
arr[c] := arr[c + b];
arr[c + b] := d;
If c > b
then
dec(c, b)
else
c := 0
end
end;
b := b
shr 1;
end
end;
Das ganze wird dann irdendwie so aufgerufen:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
a: array[0..100] of Integer;
I: Integer;
begin
for I:=Low(a) to High(a) do
a[I]:=Random(High(Integer));
ShellSort(a);
end;
So weit, so gut. Nun ist es so, dass der Array als "Tabelle" mit der folgenden Struktur missbraucht wird.
----------------------------
| Zahl 0 || .. || Zahl 9 | <- Zeile 1
----------------------------
| Zahl 10 || .. || Zahl 19 | <- Zeile 2
----------------------------
Insgesamt können 320 Integerwerte im Array gespeichert werden, 32 Zeilen à 10 Spalten also.
Nun werden ja mit obigem Algorythmus alle Zahlen sortiert, egal ob sie nun einer bestimmten Zeile angehören oder nicht. Eigentlich jedoch, sollten jeweils die ganzen Zeilen aufgrund der Zahl in der ersten Spalte sortiert werden. Desweiteren müssen die ersten 16, sowie die darauf folgenden 16 Zeilen separat sortiert werden.
Leider überfordert mich das ganze etwas, da die Software an und für sich lauffähig ist, aber halt die Kunst eines anderen ist, dessen Kunst ich irgendwie nicht verstehe.
Tips und Lösungsvorschläge sind also gerne Willkommen :-/
Grüsse
hirnstroem