AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

[PHP] Quick-Sort

Ein Thema von Chewie · begonnen am 28. Dez 2002 · letzter Beitrag vom 28. Dez 2002
Antwort Antwort
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#1

[PHP] Quick-Sort

  Alt 28. Dez 2002, 19:07
Das ist die 1:1-Umsetzung des Quicksort-Algorithmus, wie er auf www.delphi-source.de geschrieben ist. Leider funktioniert er nicht so, wie er es soll. Hat jemand eine Idee?

Code:
function QuickSort(&$array,$lo,$hi) {
  $i = $lo;
  $j = $hi;
  echo "Anfang: i: $i, j: $j
";
  $x = $array[bcdiv($lo + $hi,2,0)];
  while($i<=$j) {
    while($array[$i]<$x) $i++;
    while($array[$y]>$x) $j--;
    if($i <= $j) {
      $h = $array[$i];
      $array[$i] = $array[$j];
      $array[$j] = $h;
      $i++;
      $j--;
    }
  }
  echo "Ende: i: $i, j: $j

";
  if($lo < $j) QuickSort($array,$lo,$j);
  if($i < $hi) QuickSort($array,$i,$hi);
}
Ach ja: Die echos sind nur zur Information da und haben nix mit dem Algorithmus selbst zu tun. Falls der Algorithmus mal funktionieren sollte, kommen die raus. Nur falls es Verwirrungen gibt
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
Benutzerbild von Jan
Jan

Registriert seit: 24. Sep 2002
Ort: Magdeburg
491 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: [PHP] Quick-Sort

  Alt 28. Dez 2002, 19:42
Hallo Chewie,
also: Mir fällt zunächst auf, dass du anders als im Tut. von Delphi-Source den zu sortierenden Array nicht als global definiert hast, was ich aber machen würde, ausserdem hast du bei der Variablen-Entgegennahme im Funktionskopf ein "&" vor der array stehen, was nicht notwendig ist, da du ja die bearbeitete Variable jedesmal wieder an die Funktion übergibts -> wegmachen.

Zitat:
Leider funktioniert er nicht so, wie er es soll.
Das ist so das einzige was mir spontan auffällt, wäre nützlich, wenn du noch dabeisagen könntest was nicht so ganz richtig funktioniert.
Ich werd deinen code mal mit globaler variable testen.
Gruß
Jan
Jan
Wenn die Sonne der Kultur tief steht, werfen auch kleine Gestalten lange Schatten.
  Mit Zitat antworten Zitat
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#3
  Alt 28. Dez 2002, 19:53
Na ja, ich hab das "&" vor dem Array benutzt, weil ich ja das Array als Referenz übergeben muss. Auf globale Variablen wollte ich eigentlich verzichten. Aber ich muss es mal mit globaler Variable ausprobieren.

Nachtrag: Scheint mit globaler Variable genausowenig zu funktionieren. Ach ja, was nicht funktioniert, ist ganz einfach: Das Array wird nicht richtig sortiert.
Nimm z. B. mal folgendes Array:
Code:
$array[0] = 3;
$array[1] = 1;
$array[2] = 2;
$array[3] = 8;
$array[4] = 4;
$array[5] = 1;
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
Benutzerbild von Jan
Jan

Registriert seit: 24. Sep 2002
Ort: Magdeburg
491 Beiträge
 
Delphi 7 Enterprise
 
#4
  Alt 28. Dez 2002, 20:02
HEHE lol hab deinen Fehler gefunden.. :]
Code:
    while($array[$i]<$x) $i++;
    while($array[$y]>$x) $j--;
bei der 2. while schleife das soll wohl kaum $y sein oder? schreib da mal $j rein, dann sollte es passen.
Gruß
Jan
Jan
Wenn die Sonne der Kultur tief steht, werfen auch kleine Gestalten lange Schatten.
  Mit Zitat antworten Zitat
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#5
  Alt 28. Dez 2002, 20:08
Verdammt
Immer diese dummen Fehler. Warum muss das y auch soviel Ähnlichkeit mit dem j haben ??
Herzlichen Dank, Jan. Ich hab den Code dreimal durchgelesen und trotzdem den Fehler übersehen. Wie schön ist da ein Compiler, der bei jeder undeklarierten Variable meckert...

@ Daniel:
Es wäre ganz schön, wenn du mal einen Kopf-an-die-Wand-Smiley einführen könntest...
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 14:49 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