Einzelnen Beitrag anzeigen

alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#8

Re: Quicksort eines Datensatzes nach alphabet

  Alt 25. Jan 2008, 08:00
Eigentlich steht doch da Alles
Im auskommentierten MinSort wird das Record-Feld 'schl' verglichen:
 IF hilfsdaten[l].schl < hilfsdaten[kleinstes].schl THEN Im Quicksort dagegen der Record (was nicht funktioniert)
WHILE hilfsdaten[i] < x DO Also ersetzt Du das durch
WHILE hilfsdaten[i].schl < x.schl DO Fertig.

Es wäre allerdings eine gute Idee, eine Funktion 'RecordVergleich' zu schreiben, die das Ergebnis des Vergleiches zurückliefert, so in etwa:

Delphi-Quellcode:
Function RecordVergleich (a, b : TRecord) : Integer; // oder TVergleichsErgebnis = (veKleiner, veGleich, veGrößer)
Begin
       if a.Feld1 < b.Feld1 Then RecordVergleich := -1 // veKleiner
  else if a.Feld1 > b.Feld1 Then RecordVergleich := +1 // veGroeßer
  else if a.Feld2 < b.Feld2 Then RecordVergleich := -1 // veKleiner
  else if a.Feld2 > b.Feld2 Then RecordVergleich := +1 // veGroeßer
  else if a.Feld3 < b.Feld3 Then RecordVergleich := -1 // veKleiner
  else if a.Feld3 > b.Feld3 Then RecordVergleich := +1 // veGroeßer
...
  else RecordVergleich := 0
End;
Diese Funktion vergleicht zwei Records zuerst nach Feld1. Wenn die Records hier identisch sind, dann nach Feld2 und wenn sie da auch identisch sind, nach Feld3. Wenn sie da auch identisch sind, dann definieren wir die beiden Records als gleich (auch wenn in anderen Feldern unterschiedliche Werte stehen).
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat