Problem bei selbstgeschriebenem Quicksort :(



  • unskilled schrieb:

    Tip: Endlosschleife

    sry, ich glaub, ich hab was übersehen 😃

    ja, der debugger kann so etwas....

    bb



  • Seenitall schrieb:

    Kann mir da ein Debugger wirklich helfen?

    Denn das Programm funktioniert ja - es ist wahrscheinlich ein Logikfehler bei meinen ganzen Indizes, oder nicht?

    Genau dafür ist der Debugger da, bei einem lauffähigen Programm die Logikfehler zu finden. Du kannst dein Programm halt während der Ausführung pausieren, dir den Inhalt sämtlicher Variablen angucken und es dann schritt für schritt laufen lassen um zu sehen was passiert.



  • Ich habe ja ein paar Stichwörter genannt. Denen solltest du mal nachgehen.

    Hier etwas ausführlicher:
    http://www.c-plusplus.net/forum/viewtopic-var-t-is-242371-and-highlight-is-.html



  • Seenitall schrieb:

    Und das mit der Endlosschleife versteh ich nicht?

    Das versteht eh keiner. Aber egal. Die Zahlen sind sortiert. Vielleicht mal die reine Ausgabe überarbeiten ? 🙂



  • Also ich hab's mit dem Debugger probiert (dem von Codeblocks)
    aber offenbar weiß ich damit nicht richtig umzugehen.

    Was ich noch rausgefunden habe ist, dass wenn ich die Größe der Zufallszahlen herunterdrehe, dass der Sortiervorgang bereits bei einer kleineren Anzahl von Zahlen (so um die 50) schiefläuft. Komisch...

    Seltsam...

    Naja gut, danke für Eure Hilfe!



  • Bei Codeblocks setzt du einfach mit F5 einen Breakpoint an eine Stelle. Mit F7 kannst du dann Zeile für Zeile durchgehen. Oder du drückst die Knöpfe in der Zeile mit roten X zum Abbrechen des Programms. Da ist auch ein Button mit Extra Optionen dort solltest du Watches auswählen damit du dir die ganzen Variablen im Speicher ansehen kannst.



  • Seenitall schrieb:

    Was ich noch rausgefunden habe ist, dass wenn ich die Größe der Zufallszahlen herunterdrehe, dass der Sortiervorgang bereits bei einer kleineren Anzahl von Zahlen (so um die 50) schiefläuft. Komisch...

    Schon mal ans Vorzeichen gedacht ? -> (int(!) feld) 🙂



  • Ans Vorzeichen?
    Ich addiere und subtrahiere ja nirgends.. wo sollte ich da einen Überlauf haben?
    Oder wie ist das gemeint?

    Hab jetzt mit dem Debugger ein wenig rumprobiert und durch die Watches gesehen (danke für den Tipp! 🙂 ), dass sich bei größeren Zahlenmengen nach einigen Schleifendruchgängen tatsächlich riesen Zahlen einschmuggeln. Komm aber nicht dahinter, woher die kommen.

    Offenbar greif ich vlt während der Schleife auf Speicherelemente außerhalb meines Felds zu?! hmmm...



  • if(pivot <= feld[i])
    {  
        temp = feld[feldgroesse - 1];
        feld[feldgroesse - 1] = feld[i];
        feld[i] = temp;
    }
    
    quicksort(&feld[0], j+1);    // Eher i+1 oder besser noch i-1, da das i-te Element die endgültige Position bereits besitzt
    quicksort(&feld[i], feldgroesse - (j+1)); // Beginnt dann mit i+1 und ist feldgroesse - (i+2) lang.
    


  • Vielen Dank für den Tipp und dafür dass du dich eingelesen hast!

    Leider funktioniert das bei mir immer noch nicht - hab wohl noch an anderer Stelle den Wurm drin :((.

    Bis zu 1000 Werte werden jetzt "nahezu" sortiert - eine Hand voll Ausreisser sind dabei.
    Ab 1500 gibt er noch das unsortierte Array aus...


Anmelden zum Antworten