Quicksort
-
Hallo zusammen,
ich habe ein kleines Problem mit meinem Quicksort. Der Algorithmus funktioniert leider nur zu 90%. D. H. Nicht alle Zahlen sind richtig einsortiert. Ich glaube es liegt an irgendeiner Schleife aber ich finde den Fehler nicht.
Ich habe ein Formular, einen Button und ein RichEdit zum angucken und testen. Auf Knopfdruck sollen die Zahlen sortiert untereinander im RichEdit ausgegeben werden.
Vielleicht kann mir jemand sagen wo der Fehler liegt.
Hier mein Versuch:
void TForm1::quicksort(int von, int bis, int array[]) { int links = von, rechts = bis, mitte, zwischen; mitte = (von + bis) / 2; do { while(array[links] < array[mitte]) links++; while(array[mitte] < array[rechts]) rechts--; if (links <= rechts) { zwischen = array[links]; array[links] = array[rechts]; array[rechts] = zwischen; links++; rechts--; } } while (links <= rechts); if (von < rechts) quicksort(von, rechts, array); if (links < bis) quicksort(links, bis, array); } //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { int array[100]; randomize(); for (int i = 0; i < 100; i++) array[i] = rand() % 100; Form1 -> Cursor = crHandPoint; Button1 -> Cursor = crHandPoint; RichEdit1 -> Cursor = crHandPoint; quicksort(0, 105, array); Form1 -> Cursor = crDefault; Button1 -> Cursor = crDefault; RichEdit1 -> Cursor = crDefault; for (int i = 0; i < 100; i++) RichEdit1->Lines->Add(array[i]); } //---------------------------------------------------------------------------
Hoffe das gehört nicht eher zur VCL...
-
UPS, die 105 beim Aufruf der Funktion war ein Versehen. Daran liegt es aber nicht.