Entwickler-Ecke

Algorithmen, Optimierung und Assembler - Matrix sortieren


Michael Farlaub - Sa 11.06.05 18:33
Titel: Matrix sortieren
grüß euch

ich möchte eine matrix (also ein 2d array) nach der ersten oder zweiten dimension sortieren.(alles zahlen).

gibs da vielleicht schon einen code?



grüße

michael


Moderiert von user profile iconChristian S.: Topic aus VCL (Visual Component Library) verschoben am Sa 11.06.2005 um 18:33


retnyg - Sa 11.06.05 19:06

such mal nach Suche in: Delphi-Forum, Delphi-Library QUICKSORT


Gausi - Sa 11.06.05 22:52

Ich versteh noch nicht ganz, was du machen willst. Möchtest du jede Spalte bzw. Zeile einzeln sortieren, also z.B. aus

Quelltext
1:
2:
3:
1 3 2        1 2 3        
6 5 4  mach  4 5 6 
8 7 9        7 8 9

oder möchtest du beim Sortieren ein Spalte bzw. eine Zeile als Ganzes betrachten, und die "kleinste Zeile" nach oben schreiben (was immer das auch heißen mag...)?


Michael Farlaub - So 12.06.05 12:28

hi gausi.

danke für dein posting

Zitat:
oder möchtest du beim Sortieren ein Spalte bzw. eine Zeile als Ganzes betrachten, und die "kleinste Zeile" nach oben schreiben


genau so!



Delphi-Quelltext
1:
2:
3:
1 3       3 7          
2 1  mach 1 3    
3 7       2 1




grüße

michael


delfiphan - So 12.06.05 12:51

Das Problem:
user profile iconGausi hat folgendes geschrieben:
(was immer das auch heißen mag...)?
hab ich leider auch. Und deine Antwort
user profile iconMichael Farlaub hat folgendes geschrieben:
genau so!
hilft leider auch nicht weiter.

Könntest du uns definieren, wann für dich eine Zeile "grösser" ist als eine andere?

Wann gilt also:
ZeileI < ZeileJ

Da gibt es mehrere Möglichkeiten:

Sortierung nach Spalte K:
ZeileI < ZeileJ   <=>   ZeileI[K] < ZeileJ[K]

Sortierung nach Länge des Zeilenvektors:
ZeileI < ZeileJ   <=>   ZeileI[1]^2+ZeileI[2]^2+ZeileI[3]^2 < ZeileJ[1]^2+ZeileJ[2]^2+ZeileJ[3]^2

...

//Edit: Durch Pseudocode ersetzt


Gausi - So 12.06.05 12:56

Wann ist denn eine Zeile kleiner als eine andere? Das Algorithmische Grundgerüst zum Sortieren könnte z.B. so aussehen:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
repeat
  getauscht:=False;
  for i:=0 to Spaltenzahl-2 {oder Zeilenzahl} do
  begin
    if Istkleiner(MeinArray,i,i+1then
    begin
       vertausche(MeinArray,i,i+1);
       getauscht:=true;
    end;
  end;
until getauscht=False

Du musst dann nur noch die Funktionen/Prozeduren Istkleiner und vertausche entsprechend programmieren.

Ist zwar nicht Quicksort, aber für so relativ kleine Sachen reicht der Bubblesort immer noch aus :wink:


Allesquarks - Mo 13.06.05 22:22

Falls Du eine mathematische Matrix meinst veränderst du damit manchmal Eigenschaften wie den Wert der Determinanten.
Wenn du ganze Spalten austauschst verändert das nur das Vorzeichen!