insertionsort



  • Hi,
    ich bin dabei insertionsort zu programmieren, es aber so zu schreiben, dass es rückwärts abläuft. Das klappt jetzt aber irgendwie nicht so wirklich. Hier ist mein Code. Der Algorithmus soll ein Array x[n] sortieren.
    Danke für die Hilfe 🙂

    int i, j;
         int y;
    
         for (j = (n-2); j >= 0; j--) {
         // (n-2) um an die vorletzte Stelle des Arrays zu kommen         
             y = x[j];
             i = j;
             while (x[i + 1] < y) {
                   x[i] = x[i + 1];
                   i++;      
             }   
             x[i] = y;
         }
    


  • Kein Wunder, dass der nicht klappt. Da fehlt 'ne main()-Funktion. :p



  • Oh die habe ich vergessen zu kopieren. Sorry ^^. Ne main()- Funktion habe ich 😃



  • Warum inkrementierst du in der while-Schleife i nach jedem Durchlauf? Du setzt i = j (=n-2), wenn du dann zweimal die while-Schleife durchlaufen hast setzt es einen Zugriffserror(in Java eine ArrayOutOfBoundsException, weiß nicht wie das in C heißt) weil du doch versuchst auf x[i] (=x[n]) zuzugreifen (du vergleichst es ja). EDIT: Sorry, war bei falschem Sortierverfahren.^^
    Grüße Unix1



  • Der Grund ist eine Indexüberschreitung, weil dein i+1 > n-1 werden kann.
    Wenn du die Arraygrenzen einhältst, sollte das funzen.



  • Danke für die vielen Antworten! Ich habe es jetzt hinbekommen indem ich in der while-Schleife geprüft habe, dass (i + 1 < n) && (x[i + 1] < y) gilt. 🙂


Anmelden zum Antworten