Einzelnen Beitrag anzeigen
Alt 03.06.2004, 17:50   #1
heli2sky
Master
 
Registriert seit: 02.10.2001
Alter: 38
Beiträge: 523


heli2sky eine Nachricht über ICQ schicken
Standard quicksort erklärung

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
____________________________________
Lang ist der Weg durch Lehren, kurz und wirksam durch Beispiele.
Lucius Annaeus Seneca


...:::www.modellbaulexikon.org:::...

www.acrobat-se.org | www.ams-8c.de.vu
heli2sky ist offline   Mit Zitat antworten