Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi problem mit quicksort (https://www.delphipraxis.net/63578-problem-mit-quicksort.html)

ch4mp1on 20. Feb 2006 19:59


problem mit quicksort
 
Hallo,

also ich bin grad dabei den quicksort zu programmieren. Hab schon einige Beispiele im i-net zu hilfe genommen und allerhand ausprobiert, aber irgendwie krieg ich den nicht ans laufen.
Ich hab immer einen stack overflow, aber die Abbruchbedingung müßte eigentlich stimmen.


Delphi-Quellcode:
procedure TfrmRahmen.quicksort(var Zahlenliste:TZahlenliste; var unterePos:integer; var oberePos:integer);
var
  Pivot, links, rechts, temp:integer;
begin
  Pivot:=Zahlenliste[anzahl div 2];
  links:=unterePos;
  rechts:=oberePos;

  While (links < rechts) do
    begin
      While (Zahlenliste[links]<Pivot) do links:=links+1;
      While (Zahlenliste[rechts]>Pivot) do rechts:=rechts-1;      // wandern
      If (links < rechts-1) then
        begin
          temp:=Zahlenliste[links];
          Zahlenliste[links]:=Zahlenliste[rechts];  // tauschen
          Zahlenliste[rechts]:=temp;
          links:=links+1;
          rechts:=rechts-1;
        end;
    end; // while

    If unterePos<rechts then quicksort(Zahlenliste,unterePos,rechts);
    If links<oberePos then quicksort(Zahlenliste,links,oberePos);

end; { Quicksort }

marabu 20. Feb 2006 20:54

Re: problem mit quicksort
 
Herzlich willkommen in der Delphi-PRAXiS, champion.

Bei deiner Implementierung scheinen dir zwei Flüchtigkeitsfehler unterlaufen zu sein, wenn ich nicht irre:

Delphi-Quellcode:
// ...
  While (links <= rechts) do
// ...
      If (links < rechts + 1) then
// ...
Freundliche Grüße vom marabu

ch4mp1on 21. Feb 2006 14:40

Re: problem mit quicksort
 
Hmm, die Änderungen machen nicht wirklich Sinn.
Der Fehler bleibt hartnäckig der gleiche.

marabu 21. Feb 2006 16:48

Re: problem mit quicksort
 
Die Änderungen machen schon Sinn. Zusätzlich ändere deine Berechnung des Pivot-Elementes noch ab:

Delphi-Quellcode:
Pivot := Zahlenliste[(unterePos + oberePos) div 2];
marabu

wursthunter 21. Feb 2006 17:38

Re: problem mit quicksort
 
Ich bevorzuge BubbleSort! *g*

stoxx 21. Feb 2006 17:45

Re: problem mit quicksort
 
schau mal hier : http://www.thedelphimagazine.com/disks.php

Issue 37, Sep (223Kb) von 1998 runterladen, da ist Quellcode zu Quicksort in reinstform mit drin.
Wunderschön und funktioniert ;-)

alzaimar 21. Feb 2006 18:25

Re: problem mit quicksort
 
Ich empfehle auch immer wieder diese nette Seite über Sortieralgorithmen

ch4mp1on 22. Feb 2006 12:08

Re: problem mit quicksort
 
Ok Danke Leute! Es funzt!

Jetzt werd ich mich mal am Heap und MergeSort versuchen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:40 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz