Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi mehrdimensionalen Array sortieren ??? (https://www.delphipraxis.net/29685-mehrdimensionalen-array-sortieren.html)

torud 13. Sep 2004 10:48


mehrdimensionalen Array sortieren ???
 
Hallo Leute!

Ich habe mal wieder ein mittelschweres Problem!

Ich habe einen mehrdimesionalen Array, den ich je nach Userwunsch sortieren will!

Folgendes Beispiel:

MyData : Array[0..9,0..49] of String;

Dieser Array stellt ein Datengrid dar. Der erste Array ist sozusagen der interne Feldtyp und der Zweite ist dann für den jeweiligen Inhalt zuständig.

Der erste Array könnte also intern wie folgt strukturiert sein.
0 steht für bezeichnung
1 steht für preis
2 steht für breite
3 steht für höhe

ich möchte nun je nach Userwunsch den Array intern sortieren. Nach Name, oder nach breite oder Höhe (integer), weiss aber nicht, wie. Folgendes habe ich schon mal vorbereitet.

Delphi-Quellcode:
procedure TForm1.btn_sortby_heightClick(Sender: TObject);
var
  i,k:integer;
  HelpRecord : Array[0..9,0..49] of String;
begin
    //myRecord in HelpRecord einlesen
    for i:=0 to 49 do
      begin
        for k:=0 to 9 do
          begin
            HelpRecord[k,i]:=myRecord[k,i];
            myRecord[k,i]:=''; // Originalarray wird gleich leer gemacht
          end;
      end;
     //und hier müsste dann myRecord sortiert wieder befüllt werden
     //nur wie??? was wenn es mehrere gleiche höhen gibt?
end;
Für Tipps und Lösungsvorschlage wäre ich dankbar!

ibp 13. Sep 2004 11:29

Re: mehrdimensionalen Array sortieren ???
 
... es gibt doch so viele schöne sortieralgorihtmen "bubble sort" etc such doch mal hier im forum oder bei google!

torud 13. Sep 2004 12:57

Re: mehrdimensionalen Array sortieren ???
 
Hallo!

Danke für den Tipp!
Leider habe ich nicht finden können, wo eine gute Erklärung mitgelierfert wird, oder was ich auf Anhieb verstehe!

Nikolas 13. Sep 2004 13:01

Re: mehrdimensionalen Array sortieren ???
 
Echt nicht? Schau mal hier: Tutorial Sortier-Algorithmen I+ II

torud 13. Sep 2004 13:08

Re: mehrdimensionalen Array sortieren ???
 
Also ich hatte in der Schule keine Informtaikunterricht und habe keine Ahnung von BubbleSort usw. und so wie dieses Tut. aufgebaut wird das wohl auch in Zukunft so bleiben. :oops:

Ich habe nicht den Hauch einer Ahnung, wie ich eine dieser Sort-proceduren zum Einsatz bringen soll. Irgendwie ist das dort auch nicht beschrieben.!???

Nikolas 13. Sep 2004 13:14

Re: mehrdimensionalen Array sortieren ???
 
??? Da ist doch auch immer eine mündliche Beschreibung dabei. Was verstehst du bei
Zitat:

Zitat von SelectionSort
Finde zuerst das kleinste Element und tausche es gegen das an erster Stelle befindliche Element aus, finde danach das zweitkleinste Element und tausche es gegen das an zweiter Stelle befindliche Element aus und setze dies so lange fort, bis das gesamte Feld sortiert ist.

denn nicht :gruebel:

torud 13. Sep 2004 21:14

Re: mehrdimensionalen Array sortieren ???
 
Hallo!

So, wie ich es sehe, wäre laut Beschreibung BubbleSort was für mich.!?

Delphi-Quellcode:
Procedure BubbleSort;
var i,j : Integer;
Begin
  For i:= N downto 1 Do
    For j:= 1 To i Do
      If (Data[j-1] > Data[j]) Then SwapValues( j-1, j );
End;
Leider weiss ich echt nicht, wo ich wie den Code zum Einsatz bringen müsste, um meinen mehrdimensionalen DatenRecord zu sortieren...

Delphi-Quellcode:
procedure TForm1.btn_sortby_heightClick(Sender: TObject);
var
  i,k:integer;
  HelpRecord : Array[0..9,0..49] of String;
begin
    //myRecord in HelpRecord einlesen
    for i:=0 to 49 do
      begin
        for k:=0 to 9 do
          begin
            HelpRecord[k,i]:=myRecord[k,i];
            myRecord[k,i]:=''; // Originalarray wird gleich leer gemacht
          end;
      end;
     //und hier müsste dann myRecord sortiert wieder befüllt werden
    BubbleSort //tja Parameter gibts keine, also wie und was?????
    //laut obiger Beschreibung müsste ich, wenn ich nach Höhe sortieren wollte,
    //im dem ersten array nach dem 3 Eintrag sortieren
end;

JasonDX 13. Sep 2004 22:30

Re: mehrdimensionalen Array sortieren ???
 
Delphi-Quellcode:
procedure TForm1.btn_sortby_heightClick(Sender: TObject);
var
  i,k,s:integer; //s ist die Spalte, nach der sortiert werden soll
begin
//Bubblesort starts here
  For i:= high(myRecord[0]) downto low(myRecord[0]) Do
    For j:= low(myRecord[0]) To i Do
      If (Data[s, j-1] > Data[s, j]) Then SwapValues( j-1, j ); //in swapValues Tauschst du die ganze Zeile
end;

Nikolas 13. Sep 2004 22:30

Re: mehrdimensionalen Array sortieren ???
 
Du kannst es doch so machen:
Delphi-Quellcode:
case SortNach of
Höhe  : x:=1;
Breite : x:=2;
Preis : x:=3;
end;

bla;
if Data[j-1,x] < Data[j,x] then swap
So kannst du dann übergeben, nach was sortiert werden soll.

JasonDX 13. Sep 2004 22:41

Re: mehrdimensionalen Array sortieren ???
 
Er könnt auch den Buttons das entsprechende Tag geben und dann x über TButton(Sender).Tag zuweisen, ging noch besser, denn dann kann er alle Button-ereignisse in eins packen.

ach ja @Toxman ich glaub es is Data[x, j], nicht Data[j, x] :zwinker:

Nikolas 13. Sep 2004 22:43

Re: mehrdimensionalen Array sortieren ???
 
kann sein, ich hab mir jetzt nicht so genau angeschaut, wie das Array deklariert ist. :oops:

torud 13. Sep 2004 22:53

Re: mehrdimensionalen Array sortieren ???
 
Hallo, danke!

Ich habe Euren Vorschlag probiert und leider bekomme ich nun die Fehlermeldung, dass Data undeklariert ist.

Folgendes mache ich bisher!
Delphi-Quellcode:
procedure TForm1.btn_sortby_heightClick(Sender: TObject);
var
  i,j,k,s:integer;
  HelpRecord : Array[0..9,0..99] of String;
begin
    //myRecord in HelpRecord einlesen
    for i:=0 to 99 do
      begin
        for k:=0 to 9 do
          begin
            HelpRecord[k,i]:=myRecord[k,i];
          end;
      end;

 //Bubblesort starts here
  s:=3; //bedeutet 3 = height
  For i:= high(myRecord[0]) downto low(myRecord[0]) Do
    For j:= low(myRecord[0]) To i Do
      If (Data[s, j-1] > Data[s, j]) Then SwapValues( j-1, j ); //in swapValues Tauschst du die ganze Zeile

end;
global habe ich deklariert
Delphi-Quellcode:
var
  myRecord : Array[0..9,0..99] of String;
Ich raffs einfach nicht :wall:

JasonDX 13. Sep 2004 22:56

Re: mehrdimensionalen Array sortieren ???
 
Schreib statt Data myRecord... :roll:
lass mich raten: er kenn SwapValues nicht?

torud 13. Sep 2004 23:02

Re: mehrdimensionalen Array sortieren ???
 
yepp = genau, dass kennt er nicht!

JasonDX 13. Sep 2004 23:09

Re: mehrdimensionalen Array sortieren ???
 
schreib sowas:
Delphi-Quellcode:
procedure TForm1.btn_sortby_heightClick(Sender: TObject);
var
  i,k,j,s:integer; //s ist die Spalte, nach der sortiert werden soll
  buff: string;
begin
//Bubblesort starts here
  For i:= high(myRecord[0]) downto low(myRecord[0]) Do
    For j:= low(myRecord[0]) To i Do
      If (myRecord[s, j-1] > myRecord[s, j]) Then
      Begin
        For k := low(myRecord) To high(myRecord) Do
        Begin
          buff := myRecord[k, j-1];
          myRecord[k, j-1] := myRecord[k, j];
          myRecord[k, j] := buff;
        end;
      end;
end;
Müsste eigentlich klappen.

Edit: Fehler ausgebessert

torud 13. Sep 2004 23:22

Re: mehrdimensionalen Array sortieren ???
 
hallo und vielen dank,

pc ist abgeschmiert, kanns erst morgen testen

Alexander 14. Sep 2004 10:15

Re: mehrdimensionalen Array sortieren ???
 
Moin,
du kannst unter Open Source auch mal nach meinem Programm schaun, müsste noch ziemlich weit oben stehen ;-)
Da sind verschiedene Sortieralgos implementiert (derzeit Bubble-, Shell-, Insertion-, Selection Sort), die werden zeitlich und an Hand der Anzahl an Vergleiche verglichen.
Die Methoden müsstest du noch kurz umschreiben, damit du sie mit mehrdimensionalen Arrays verwenden kannst. Sollte aber nicht all zu schwer sein, denn hier wurde dir das ja schon am Beispiel des Bubblesorts gezeigt..

Alexander 14. Sep 2004 10:18

Re: mehrdimensionalen Array sortieren ???
 
hier ist der Thread: http://www.delphipraxis.net/internal...ct.php?t=33713

torud 14. Sep 2004 13:42

Re: mehrdimensionalen Array sortieren ???
 
Hallo Alexander!

Vielen Dank!

Ich werde es versuchen, weiss aber noch nicht, wann und ich bin mir auch noch nicht sicher, ob ich das mit dem Array nicht vielleicht doch besser irgendwie anders löse, da mir das alles viel zu aufwendig erscheint ich es anhand des Codes allein nicht verstehe.

Alexander 14. Sep 2004 14:25

Re: mehrdimensionalen Array sortieren ???
 
Du könntest auch eine Liste nehmen...
Zum Sortierieren: Bubblesort ist eigentlich sehr langsam und daher nicht zu empfehlen. Man merkt es schon deutlich ab 5000 Einträgen. Hängt natürlich auch immer vom jeweiligen REchner ab..
Shellsort ist da schon wesentlich effektiver, natürlich noch nicht so effektiv wie Quicksort, aber dafür vermutlich leichter zu verstehen, da nicht rekursiv.
Ich habe mir Shellsort selber erklärt an Hand ein paar wenigen Stichworten, dann ein wenig nachgedacht und den Source auf'm Blatt Papier im Pseudo-Code geschrieben und nach Delphi portiert...
Das schaffst du bestimmt auch ;-)


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:58 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 by Thomas Breitkreuz