PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : "BubbleSort" sortiert nicht


oOblubbOo
19.04.2002, 12:42
Tagchen..
ich hab im C++ Builder 5 ein Programm geschrieben, dass ein Array mit Zufallszahlen füllen soll, diese dann grafisch anzeigen soll und auf Befehl sortiert..

Das mit dem Anzeigen und Füllen ist kein problem.. aber er will einfach nicht sortieren..
hier der "Sortier-Abschnitt":


int i=0;
int flagge;
int temp;

while(flagge==0)
{
flagge=1;
while(i < Form1->Pb1->Width) //solange i kleiner als anzahl der gefüllten Felder
{
if(arr[i] > arr[i+1]) //wenn das aktuelle Feld grösser ist als das nächste...
{
temp = arr[i];
arr[i] = arr[i+1];
arr[i+1] = temp; //Feldinhalte wurden getauscht
flagge=0;
}
i++;
}
}
:mauer:

Falls mir jemand weiterhelfen kann, bitte schreiben..


xOOn
19.04.2002, 13:41
1.
int flagge = 0;
weil wenn du pech hast startet er dir gar nicht! :D :D
2.
mach unter flagge = 0;
i = 0;
3.
Form1->Pb1->Width pass auf du musst einen eintrag davor aufhoeren !!! weil du ja auf i + 1 zugreiftst wenn
arr [Form1->Pb1->Width] das letzte element ist, dann ist es ok sonst musste du i um eins weniger weit laufen lassen

wenn du was nciht verstehst warum, dann frage einfach

Codeq
19.04.2002, 15:33
Hoi

ich würd eh bubble sort wegwerfen ist viel zu lahm das ding.. nimm lieber Heap oder Quicksort ...

aber das mit dem flagge = 0; ist echt wichtig.. würde auch vorschlagen stattdessen ne for schleife zu benutzen da besteht nicht die gefahr das man das inkrementieren und zuweisen des startwertes vergisst da der compiler meckert...

xOOn
19.04.2002, 15:40
das mit flagge ist nicht schlecht, weil er dadurch erkennt ob die liste geordnet ist, bei den meisten implementationen wird einfach 2 verschachtete for schleifen von 0..[anzahl -1] genommen (wahrscheinlich weis es egal ist obe er lahm oder noch lahmer ist :D :D :D )

bei dem mit der schleige (2. while) muss ich codeq recht geben!

naja soviel ich verstanden habe ist das ne demoapp die das sortieren gfx darstellt, das geht quicksort nicht so gut, ist naemlich zu schnell :D :D :D

Codeq
19.04.2002, 15:43
http://www.inf.fh-flensburg.de/lang/inf2/index.htm

nette appletts wo es sehr geil erklärt ist.. btw ;)

oOblubbOo
20.04.2002, 00:16
3.
Form1->Pb1->Width pass auf du musst einen eintrag davor aufhoeren !!! weil du ja auf i + 1 zugreiftst wenn
arr [Form1->Pb1->Width] das letzte element ist, dann ist es ok sonst musste du i um eins weniger weit laufen lassen

deswegen ja &quot;<&quot; und nicht &quot;<=&quot; :) ansonsten big THX 4 tips


ich würd eh bubble sort wegwerfen ist viel zu lahm das ding.. nimm lieber Heap oder Quicksort ...
Muss aber BubbleSort sein :), weiss dass der lahm ist...


vielen dank für die tips.. aber leider läuft das sortieren immernoch nich :(

xOOn
20.04.2002, 11:53
int flagge = 0;
int temp;

while(flagge==0)
{
flagge=1;
for (int i = 0; i < Form1->Pb1->Width; i++)
{
if(arr[i] > arr[i+1]) //wenn das aktuelle Feld grösser ist als das nächste...
{
temp = arr[i];
arr[i] = arr[i+1];
arr[i+1] = temp; //Feldinhalte wurden getauscht
flagge=0;
}
}
}

das muesste funken