PHP-Code:
<?php
$data = file("data.txt");
foreach($data as $dat)
echo "$dat | ";
echo "
[b]Daten werden sortiert...
";
$vergleich=0;
$tausch=0;
function quick($links,$rechts) {
global $data,$pivot,$vergleich,$tausch;
$i = $links;
$j = $rechts;
$pivot = $data[round(($i+$j)/2)];
while($i<$j) {
while(($data[$i]+0) < ($pivot+0)) {
$vergleich++;
$i++;
}
while(($data[$j]+0) > ($pivot+0)) {
$vergleich++;
$j--;
}
if($i<=$j) {
$tausch++;
$temp = $data[$i];
$data[$i] = $data[$j];
$data[$j] = $temp;
$i++;
$j--;
}
}
if($links < $j)
quick($links,$j);
if($i < $rechts)
quick($i,$rechts);
}
quick(0,(count($data)-1));
echo "
$vergleich Vergleiche und $tausch Vertauschungen waren nötig!
";
echo "Daten sind sortiert und werden ausgegeben...[/b]
";
foreach($data as $dat)
echo "$dat | ";
?>
Was macht das genau:
if($links < $j)
quick($links,$j);
if($i < $rechts)
quick($i,$rechts);
???
Und bitte nicht einfach nur so eine Antwort wie, "die Grenzen neu setzen" oder "die Funktion rekursiv aufrufen" - ich muss das genau wissen, sodass ich es auch erklären kann!
Die erste if-Schleife ist mir klar, die zählt so lange durch, bis j=links (links ist am Anfang fix 0 und j wird immer kleiner), aber was passiert dann? wie werden jeweils die rechten Hälften (bei Pivot=Mitte) durchsucht?
PS: Gibt es eine andere Möglichkeit aus irgendeiner Variablen eine "Zahl" zu machen als ($var+0) ?? -> Das Problem ist, dass wenn das nicht so geschrieben wird, es so sortiert wird: 1,10,110,2,3,30,4