![]() |
Array mit "Zeilen" sortieren
'loha Folks,
Mit dem folgenden Shell-Sort-Sortieralgorythmus, wird ein Array n bisschen sortiert:
Delphi-Quellcode:
Das ganze wird dann irdendwie so aufgerufen:
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;
Delphi-Quellcode:
So weit, so gut. Nun ist es so, dass der Array als "Tabelle" mit der folgenden Struktur missbraucht wird.
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; ---------------------------- | 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 |
Re: Array mit "Zeilen" sortieren
Guten Morgen.
Hilfreich dürfte sein, wenn du deine array Struktur redefinierst:
Delphi-Quellcode:
Grüße vom marabu
type
TFlatArray = array [0..319] of integer; TDimArray = array [0..1, 0..15, 0..9] of integer; Procedure ShellSort(var arr: TDimArray; halfIndex: integer); begin // Hier musst du an den 3-dimensionale Index anpassen. // verschoben werden immer 10-er Pakete auf der untersten Indexstufe // ... end; procedure TForm1.Button1Click(Sender: TObject); var a: TFlatArray; i: Integer; begin for i := Low(a) to High(a) do a[i] := Random(Length(a)); ShellSort(TDimArray(a), 0); ShellSort(TDimArray(a), 1); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:11 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz