Einzelnen Beitrag anzeigen

Benutzerbild von hummer
hummer

Registriert seit: 27. Mai 2003
Ort: Hattingen
437 Beiträge
 
Delphi 7 Enterprise
 
#1

3 verschiedene Sortierverfahren

  Alt 12. Jun 2003, 18:11
Hallo
Hier stelle ich drei verschiedene Sortierverfahren vor, mit denen man Zahlenketten sortieren kann.
Zur Eingabe und Ausgabe habe ich einen neuen Type definiert.

type tDaten : array [1..n] of integer n : Anzahl der Zahlen

Benutzt wird in allen Sortierverahren eine Procedur, die 2 Zahlen mit Hilfe einer Variable vertauscht.

Delphi-Quellcode:
procedure tausche (var a, b : integer);
var
  hilf: integer;
begin
  hilf := a;
  a := b;
  b := hilf;
end;
1. Sortieren durch direkte Auswahl
Es wird zuerst die Zahl mit dem niedrigsten Wert aus der Zahlenkette rausgesucht. Diese wird dann mit Hilfe eines Dreieckstausches mit der ersten Zahl vertauscht. Die erste Zahl ist dann sortiert. Dann wird aus dem nichtsortierten Teil die niedriegste Zahl rausgesucht und mit der ersten Zahl des nichtsortierten Teiles vertauscht. Das Array ist sortiert, wenn der nichtsortierte Teil nur noch aus einer Zahl besteht.

Delphi-Quellcode:
procedure direkte_Auswahl (Eingabe : tDaten; n : integer; VAR Ausgabe tDaten);
var
  x, y : integer;
begin
  for x := 1 to n do
  begin
    for y := position1 + 1 to n do
      if Eingabe[y] < Eingabe[x] then
        tausche (Eingabe[x], Eingabe[y]);
  end;
  Ausgabe := Eingabe;
end;
2. Sortieren durch direktes Einfügen
Die erste Zahl wird als sortiert angesehen. Dann wird die erste Zahl des nichtsortierten Teils genommen und an die richtige Stelle im sortierten Teil eingefügt. Das Array ist sortiert, wenn die letzte Zahl richtig eingefügt worden ist.

Delphi-Quellcode:
procedure direktes_Einfügen (Eingabe : tDaten; n : integer; VAR Ausgabe tDaten);
var
  x, y : integer;
begin
  for x := 1 to n do
  begin
    y := x;
    while Eingabe[y+1] < Eingabe[y] do
    begin
      tausche (Eingabe[y], Eingabe[y+1]);
      if y > 1 then
      y := pred (y);
    end;
    Ausgabe := Eingabe;
  end;
end;
3. Bubble-Sort
Es werden von Anfang an immer zwei nebeneinander liegende Karten verglichen. Liegen sie nicht in der richtigen Reihenfolge werden sie vertauscht. Das wird dann bis zum Ende des Arrays gemacht. Nach dem ersten Durchgang ist die letzte Karte sortiert. Dann wird der erste Schritt bis zum sortierten Teil wiederholt. Der Vorgang wird solange wiederholt, bis bei einem Durchlauf keine Karten mehr vertauscht wurden.

Delphi-Quellcode:
Procedure Bubble-Sort (Eingabe : tDaten; n : integer; VAR Ausgabe : tDaten);
var
  x, y : integer;
  tausch : boolean;
begin
  y := n;
  tausch := true;
  while tausch do
  begin
    tausch := false;
    for x := 1 zo y -1 do
    if Eingabe[x] > Eingabe[x+1] then
    begin
      tausch := true;
      tausche (Eingabe[x], Eingabe[x+1]);
    end;
    y := pred(y);
    Ausgabe := Eingabe;
  end;
end;
Bei Rückfragen stehe ich gerne zur Verfügung.
Viel Spass beim Sortieren.

[edit=Matze][code]-Tags durch [delphi]-Tags ersetzt und Code formatiert. Mfg, Matze[/edit]
Manuel
unser Infolehrer -> Wissen ist Macht. Wir wissen nichts. Macht nichts.
  Mit Zitat antworten Zitat