Einzelnen Beitrag anzeigen

Tarry

Registriert seit: 6. Nov 2007
123 Beiträge
 
#1

Verschiedene Sortier Algorithmen (unter anderem Quicksort)

  Alt 15. Aug 2008, 23:36
So,
hier eine Liste mit 4 verschiedenen Sortier Algorithmen:

Delphi-Quellcode:
unit SortAlgos;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

procedure WertTauschen(var Werte: Array of Integer; StelleA, StelleB: Integer);
procedure BubbleSort(var dummy: Array of Integer; n : integer);
procedure Sortiere_Einfuegen(var dummy: Array of Integer; n : integer);
procedure Sortiere_Auswahl(var dummy: Array of Integer; n : integer);
procedure QuickSort(var dummy: Array of Integer; erstes,letztes: integer);

implementation


procedure WertTauschen(var Werte: Array of Integer; StelleA, StelleB: Integer);
var tempI: integer;
begin
tempI := Werte[StelleA];
Werte[StelleA] := Werte[StelleB];
Werte[StelleB] := tempI;
end;

procedure BubbleSort(var dummy: Array of Integer; n : integer);
var i,j : integer;
begin
for i := 0 to n do
  for j := 0 to n - 1 - i do {ListBox beginnt bei Zeile 0}
    if dummy[j] > dummy[j+1] then
    WertTauschen(Dummy,j,j+1);
end;

procedure Sortiere_Einfuegen(var dummy: Array of Integer; n: integer);
var i,j,hilf: integer;
begin
  for i := 1 to n do {Änderung gegenueber dem Arbeiten auf ARRAY: i:=1}
    begin
      j := i - 1;
      hilf := dummy[i];
      while ((j >= 0) and (hilf < dummy[j])) do {j<=0}
        begin
          dummy[j+1] := dummy[j];
          dec(j);
        end;
      dummy[j+1] := hilf;
    end
end;

procedure Sortiere_Auswahl(var dummy: Array of Integer; n: integer);
var i,j,tausch_index, min: integer;
begin
  for i := 0 to n - 1 do
   begin
    min := dummy[i];
    tausch_index := i;
    for j := i + 1 to n do
    begin
      if min > dummy[j] then
      begin
        tausch_index := j;
        min := dummy[j]
      end;
    end;
    if tausch_index > i then WertTauschen(Dummy,i,tausch_index);
   end
end;

procedure QuickSort(var dummy: Array of Integer; erstes,letztes: integer);
var vonLinks, vonRechts, mitte, vergleichsElement: integer;
begin
if erstes < letztes then {mind. 2 Elemente}
begin {Zerlegung vorbereiten}
  mitte := (erstes + letztes)div 2;
  vergleichsElement := dummy[mitte];
  vonLinks := erstes;
  vonRechts := letztes;
  while vonLinks <= vonRechts do {noch nicht fertig zerlegt?}
  begin
    while dummy[vonLinks] < vergleichsElement do {linkes Element suchen}
    vonLinks := vonLinks + 1;
    while dummy[vonRechts] > vergleichsElement do {rechtes Element suchen}
    vonRechts := vonRechts - 1;
    if vonLinks <= vonRechts then
      begin
        WertTauschen(Dummy,vonLinks,vonRechts); {Elemente tauschen}
        vonLinks := vonLinks + 1;
        vonRechts := vonRechts - 1;
      end;
  end;
  Quicksort(dummy,erstes,vonRechts); {li. und re. Teilfeld zerlegen}
  Quicksort(dummy,vonLinks,letztes);
end;
end;

end.
Gruß
Tarry
Angehängte Dateien
Dateityp: pas sortalgos_151.pas (2,8 KB, 33x aufgerufen)
"Es gibt zwei Dinge, die unendlich sind. Das Universum und die menschliche Dummheit. Beim Universum bin ich mir noch nicht ganz sicher." -Albert Einstein

Probiere doch mal mein Wecker aus
--> http://tarry91.quotaless.com/index.html
  Mit Zitat antworten Zitat