Einzelnen Beitrag anzeigen

Medium

Registriert seit: 23. Jan 2008
3.685 Beiträge
 
Delphi 2007 Enterprise
 
#20

Re: Liste Sortieren - Gleiche Liste wie bei den anderen Them

  Alt 8. Sep 2009, 09:44
Okay, du hast vermutlich noch nie zuvor eine Sortierung gebaut. Daher mal kleinschrittig:

Wie definiert man "sortiert"? Sortiert ist etwas, wenn Elemente einer Menge entsprechend ihrer ordinalen Rangfolge angeordnet sind. Das heisst für natürliche Zahlen z.B. dass eine 5 immer vor einer 8 stehen muss, eine 12 aber hinter der 8. Das heisst, das aller erste was du brauchst ist ein Weg den Besitzernamen eine Rangfolge zuzuordnen.
Da es sich hier um Text handelt macht eine alphabetische Ordnung wohl am meisten Sinn, so dass A vor B steht - man sagt dann A kleiner B.

Was muss man tun, um zwei Elemente zu sortieren? Simpel: Vergleiche die beiden, und tausche sie gegeneinander aus wenn das erste größer dem zweiten ist. (Für aufsteigende Sortierung. Für absteigend genau anders herum.)
(Wenn du das für jedes Element einer Liste und seinem Nachfolger machst, so lange bis nichts mehr vertauscht wurde, ist das schon Bubblesort.)

Nun bleibt noch die Frage: Wie kann ich in Delphi definieren dass ein Buchstabe kleiner oder größer als ein anderer ist? Das ist ebenfalls sehr einfach, da in so ziemlich allen Zeichentabellen - allen voran die ASCII Tabelle - dem A ein kleinerer Zahlwert zugeordnet ist als dem B. Um nun in Delphi zu fragen ob Zeichen1 kleiner Zeichen2 genügt:
Delphi-Quellcode:
var
  Z1KleinerZ2: Boolean;
  Z1, Z2: Char;
begin
  Z1 := 'A';
  Z2 := 'B';
  Z1KleinerZ2 := Ord(Z1) < Ord(Z2);
end;
Das ganze würde jetzt erst nur einen Buchstaben betrachten. Für ganze Zeichenketten könnte sowas so aussehen:
Delphi-Quellcode:
var
  S1kleinerS2: Boolean;
  S1, S2: String;
  i: Integer;
begin
  S1 := 'Andreas';
  S2 := 'Aaron';
  i := 1;
  while (S1[i]=S2[i]) inc(i);
  S1kleinerS2 := S1[i] < S2[i];
end;
Du schiebst also "i" solange nach "hinten" in deinen Strings, bis ein unterschiedliches Zeichen auftaucht und vergleichst dann diese. Der Codefetzen hier knallt übrigens noch, wenn die beiden Strings unterschiedliche lang sind, und einer der beiden gleich dem anderen ist, nur um Zeichen gekürzt. Das müsstest du dann noch separat behandeln.

Und das sollte schon an Infos ausreichen um zumindest ein einfaches Bubblesort auf Stringbasis zu basteln. Wenn nicht, sag uns doch bitte wo genau dann noch das Problem liegt.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat