WCM - Das österreichische Computer Magazin Forenübersicht
 

Zurück   WCM Forum > Rat & Tat > Programmierung

Programmierung Rat & Tat für Programmierer

Microsoft KARRIERECAMPUS

Antwort
 
Themen-Optionen Ansicht
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
Alt 03.06.2004, 18:08   #2
flinx
Inventar
 
Registriert seit: 08.04.2001
Beiträge: 3.101


Standard

http://www.wikiservice.at/dse/wiki.cgi?QuickSort ?
flinx ist offline   Mit Zitat antworten
Alt 03.06.2004, 18:11   #3
_m3
Inventar
 
Registriert seit: 24.09.2001
Beiträge: 7.335


Standard

Prüfung oder Referat, um eine bessere Note zu bekommen?

Also zum Quicksort solltest Du via Google genug gute Erklärungen bekommen (Auf Wikipedia kann ich ja dank flinx nicht mehr verweisen ).
____________________________________
Weiterhin zu finden auf http://martin.leyrer.priv.at , http://twitter.com/leyrer , http://www.debattierclub.net/ , http://www.tratschen.at/ und via Instant Messaging auf Jabber: m3 <ät> cargal.org .
_m3 ist offline   Mit Zitat antworten
Alt 04.06.2004, 11:57   #4
heli2sky
Master
 
Registriert seit: 02.10.2001
Alter: 38
Beiträge: 523


heli2sky eine Nachricht über ICQ schicken
Standard

Nein, nur Matura

Die Erklärung auf wikipedia kenne ich, aber die hilft mir nicht. Mir gehts konkret um die Rekursion - die verstehe ich nicht ganz! Die erste if-Schleife verstehe ich, da rückt die rechte Grenze immer weiter nach links, bis sie gleich ist der linken Grenze und dann wird die nächste if-Schleife ausgeführt, aber was macht die genau???

PS: Gegoogelt hab ich auch schon genug, aber ich konnte noch keine gute Erklärung finden.
____________________________________
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
Alt 05.06.2004, 13:15   #5
heli2sky
Master
 
Registriert seit: 02.10.2001
Alter: 38
Beiträge: 523


heli2sky eine Nachricht über ICQ schicken
Standard

Ok, ein Freund hat es mir jetzt erklären können!

Mein Problem war, dass ich vergessen habe, dass, nachdem in der Funktion quick() nochmal die Funktion quick() aufgerufen wurde, die "erste" Funktion quick() ganz normal weitergeht... Ich hab das immer vergessen und das Ende praktisch unter den Tisch fallen lassen, wodurch mein Problem zustande kam, dass ich nicht wusste, wie das ganze dann in die andere Richtung zurückgeht!
____________________________________
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
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.

Gehe zu


Alle Zeitangaben in WEZ +2. Es ist jetzt 07:10 Uhr.


Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Forum SEO by Zoints
© 2009 FSL Verlag