Einzelnen Beitrag anzeigen

hirnstroem

Registriert seit: 21. Sep 2005
297 Beiträge
 
Delphi 2006 Professional
 
#1

Array mit "Zeilen" sortieren

  Alt 16. Nov 2005, 08:55
'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
  Mit Zitat antworten Zitat