AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Array mit "Zeilen" sortieren

Ein Thema von hirnstroem · begonnen am 16. Nov 2005 · letzter Beitrag vom 16. Nov 2005
Antwort Antwort
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
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: Array mit "Zeilen" sortieren

  Alt 16. Nov 2005, 09:12
Guten Morgen.

Hilfreich dürfte sein, wenn du deine array Struktur redefinierst:

Delphi-Quellcode:
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;
Grüße vom marabu
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:15 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz