Sortieren
-
Hallo!
In meinem Buch wurde mir die Aufgabe gestellt, einen Vektor mit mehren Zahlen aufsteigend zu sortieren. Dazu soll ich immer mit den Nachbarelemente vergleichen und eventuell vertauschen. Abgebrochen wird, wenn in einem Durchlauf nichts mehr vertauscht werden kann.
Es ist folgender Code rausgekommen:int main() { const max = 5; unsigned short temp; unsigned short unsorted[max]; bool sorted = false; cout << "Geben Sie " << max << " Zahlen ein: " << endl; for(unsigned short c = 0; c < max; c++) cin >> unsorted[c]; cout << "Die Zahlen werden nun aufsteigend sortiert..." << endl << endl; while(!sorted) { sorted = true; for(unsigned short i = 0; i < max; i++) { if(unsorted[i] > unsorted[i+1]) { sorted = false; temp = unsorted[i+1]; unsorted[i+1] = unsorted[i]; unsorted[i] = temp; } } } cout << "Ergebnis: " << endl; for(unsigned short x = 0; x < max; x++) cout << unsorted[x] << endl; cout << endl << "Fertig." << endl; return 0; }Aber müsste es nicht heißen:
int main() { const max = 5; unsigned short temp; unsigned short unsorted[max]; bool sorted = false; cout << "Geben Sie " << max << " Zahlen ein: " << endl; for(unsigned short c = 0; c < max; c++) cin >> unsorted[c]; cout << "Die Zahlen werden nun aufsteigend sortiert..." << endl << endl; while(!sorted) { sorted = true; //Wenn i das letzte Element ist, wäre i+1 undefiniert?! for(unsigned short i = 0; i < (max-1); i++) { if(unsorted[i] > unsorted[i+1]) { sorted = false; temp = unsorted[i+1]; unsorted[i+1] = unsorted[i]; unsorted[i] = temp; } } } cout << "Ergebnis: " << endl; for(unsigned short x = 0; x < max; x++) cout << unsorted[x] << endl; cout << endl << "Fertig." << endl; return 0; }Denn wenn das letzte Element mit dem letzten Element+1 verglichen wird, ist "letztes Element+1" doch undefiniert, aber es geht trotzdem beides!
-
ceplusplus schrieb:
Denn wenn das letzte Element mit dem letzten Element+1 verglichen wird, ist "letztes Element+1" doch undefiniert,
Richtig.
aber es geht trotzdem beides!
Dann ist das Zufall. Vermutlich liegt hinter dem Array unsorted einfach ein ziemlich großer Wert im Speicher, so dass dessen Position nicht verändert wird. Du kannst ja mal den größtmöglichen Wert für unsigned short eingeben. Wenn der bei dir 16 Bit hat, wäre das 65535. Dann sollte ein Wert in deinem sortierten Array auftauchen, den du nicht eingegeben hast.
-
Komisch, kennt jemand das Buch C++ lernen und professionell anwenden?
Da wird als Musterlösung auch "max" und nicht "(max-1)" verwendet, und es funktioniert trotzdem immer.