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.