Probleme mit Sortierfunktion



  • Hallo,

    gemäß den Regeln für diese Frage einen neuen Thread,
    folgende Bubblesortsortierfunktion habe ich:

    inline void bubblesort(int array[])
    {
     for(int j=0; j<=anzahl-1; ++j)
      {
       for(int i=0; i<=anzahl-1; ++i)
       	 if(array[i] > array[i+1])
    	 {
    		 int temp   = array[i+1];
    		 array[i+1] = array[i];
    		 array[i]   = temp;
    	 }	 
      }
    }
    

    Funktioniert wunderbar, nun wollte ich sie für einen Vector umschreiben nur leider klappt das komischerweise nicht ganz:

    inline void bubblesort()
    {
     for(int j=1; j<=zahlen.size(); j++)
      {
       for(int i=0; i<=zahlen.size()-1; i++)  // Hier will er den < operator
    	  if(zahlen[i] > zahlen[i+1])
    	  {
    		int temp    = zahlen[i+1];
    		zahlen[i+1] = zahlen[i];
    		zahlen[i]   = temp;
    	 }	 
      }
    }
    

    Und das verstehe ich nicht, er stürzt ab, obwohl der vector definitiv platz für 20 werte hat und ich ja sage "von 0 bis kleinergleich 20-1, also 19".
    Mache ich den '=' operator weg dann klappt es und es funktioniert sogar richtig, allerdings läuft die schleife doch dann nur noch von 0-18, ist es also zufall das es noch geht? Und wieso stürzt er ab?

    😕



  • Er stürzt wegen dem zahlen[i+1] = ... ab, du läufst von 0 bis size()-1, wenn du dir jetzt überlegst wieviel zahlen[size()-1+1] ist, dann weißt du warum er abschmiert! Lass das = in der Forschleife weg und es ist richtig!



  • Aber wieso ist er beim Array nicht abgestürzt, da ist es doch fast das gleiche?



  • Da musst du mal zeigen wie der Aufruf der Funktion ist und auf was Anzahl gesetzt ist!



  • Es gibt eine Konstante die den Wert 20 hat,

    damit wird ein array erstellt und die referenz an die funktion übergeben, anzahl ist ebenfalls 20.


Anmelden zum Antworten