Thema: Delphi Array sortieren

Einzelnen Beitrag anzeigen

Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#3

Re: Array sortieren

  Alt 5. Mär 2006, 15:06
Hi,
ja was du benutzt sieht ein wenig nach dem Bubblesort ohne Optimierung (und imho falsch) aus.

Als ersten und wichtigsten Tipp, solltest du doch deinen Codestil etwas verändern. Zu gutem Stil gehört, dass du immer hierachisch einrückst und dass allen Kontrollstrukturen ein begin end; folgt.

In deinem Fall sähe dass dann so aus

Delphi-Quellcode:
procedure Arrayordnen;
var Anzahl: integer;
    x,y: integer;
    min: tmyadress;
    minposition: integer;
begin
  anzahl:=anzahlfinden;
  for y:=1 to (Anzahl-1) Do
    begin
      For x:=y to (Anzahl-1) do
        begin
          if MyAdress[x].Name < MyAdress[x+1].Name Then
            begin
              Min:= MyAdress[x];
              MinPosition:= x;
            end
          else
            begin
              Min:= MyAdress[x+1];
              minPosition:=x+1;
            end;
          MyAdress[MinPosition]:=MyAdress[y];
          MyAdress[y]:=min;
        end; // HIER GANZ WICHTIG!
    end;
end;
Wie du siehst wurde hier ein begin end hinter for x ... eingefügt. Ohne dieses widerholst du zwar die Schleife (Anzahl - 1) - y mal, aber du vergleichst in diesem Durchlauf nur paarweise benachbarte Elemente. Ich denke einfach mal, dass du für jeden dieser Vergleiche auch einmal tauschen möchtest. Andernfalls müsstest du dir das lokale (für y) kleinste Element merken (Ginge dann in Richtung Insertionsort).
Wenn du es so machen wolltest wie ich es jetzt annehme, dann hast du aber eine falsche untere Grenze. In jedem Durchlauf tauscht du so, dass am Ende (der for x Schleife) das größte Element ganz rechts steht. Da du aber die linke Grenze verschiebst, werden die unteren Werte nie sicher sortiert sein. Da solltest du eher die rechte Schranke verschieben.

Sorry, hoffe war jetzt nicht zu schnell dahin geschrieben und du verstehst ein wenig was ich meine. Sonst frag einfach nochmal genauer nach.

Gruß Der Unwissende
  Mit Zitat antworten Zitat