AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Anfängerproblem mit Quicksort...

Ein Thema von Scipio · begonnen am 26. Jan 2010 · letzter Beitrag vom 27. Jan 2010
 
Scipio

Registriert seit: 26. Jan 2010
Ort: Bad Waldsee
6 Beiträge
 
#1

Anfängerproblem mit Quicksort...

  Alt 26. Jan 2010, 19:03
Hallo erstmal,
Ich les hier ja schon länger mit, aber jetzt hab ich auch mal ne Frage:
Ich beschäftige mich gerade mit Bubble- und Quicksort. Bubblesort ist Idiotensicher. Quicksort hingegen bereitet mir einige Schwierigkeiten. Hab jetzt mal den folgenden Code fertig bekommen, der vom Compiler akzeptiert wird und keine Stack-Overflows o.ä. produziert:
Delphi-Quellcode:
procedure TForm1.Quicksort(var S: Array of Integer; US, OS: Integer);
var
M, T, I: Integer;
begin
U := US;
O := OS;
M := S[(U + O) div 2];
  repeat
    while S[U] < M do inc(U);
    while S[O] > M do dec(O);
    if U <= O then
      begin
      T := S[U];
      S[U] := S[O];
      S[O] := T;
      inc(U);
      dec(O);
      end;
  until O < U;
  if O > US then Quicksort(S, US, O);
  if U < OS then Quicksort(S, U, OS);
  Label1.Caption := '';
  for I := US to OS do
  Label1.Caption := Label1.Caption + IntToStr(S[I]) + '; ';
end;
Ich übergebe einen Array, der zu Testzwecken nur 10 Werte enthält, US ist zu Beginn 0, OS ist zu Beginn 10. T ist die Exchange-Variable, I brauche ich nur als Schleifenvariable für das Eintragen der Werte in mein Label.
EDIT:
Habe festgestellt das das var in der Definition(?) der Prozedur fehlte. Hab das jetzt gefixt, und es wirkte Wunder.
Sorry deswegen. Hab aber immernoch ein Problem: Auf magische Art wird einer meiner Werte zu Null. Hat jemand eine Ahnung wo?


Mein Problem ist jetzt, dass es scheint als würde der Code nur einmal ausgeführt, sprich das wird so sortiert, dass es ein Pivot-Element gibt, "rechts daneben", also im oberen Bereich des Arrays gibt es nur größere bzw. gleiche Werte, links nur kleinere. Aber auf den beiden Seiten des Pivotelements herrscht ansonsten Unordnung. Hat jemand ne Ahnung woran das liegen könnte? Habe schon versucht den Code Schritt für Schritt durchzuführen, konnte aber keine Ungereimtheiten feststellen. Der Algorithmus ruft sich mehrmals selber auf, das funktioniert also.
Ich habe mich mit meinem Code grob am Beispiel in Demos\Threads\SortThds.pas orientiert. Ich habe Allerdings versucht den Code zu vereinfachen, da ich die beiden Algorithmen Leuten vorstellen soll, die noch weniger Ahnung als ich haben.
Bin um jede Hilfe dankbar.
Gruß Scipio
Angehängte Dateien
Dateityp: rar quicksort_175.rar (163,8 KB, 4x aufgerufen)
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:26 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz