Was ist bei meinem Bubblesort falsch?
Mir ist aufgefallen, dass bei gleichen Elementen im Array diese nicht sortiert werden.
Hier ist mein Code:
void bubbleSort(int array[], int size2)
{
int i;
int j;
int counter = 0;
int temp;
for (i = 0; i < size2 - 1; i++) {
for (j = 0; j < size2 - 1 - i; j++) {
counter = 0;
if (array[j] > array[j + 1]) {
temp = array[j];
array[j] = array[j + 1];
array[j + 1] = temp;
counter++;
}
}
if (counter == 0) {
return;
}
}
}
Anscheinend ist etwas bei der Abbruchbedingung falsch, da es bei verschiedenen Elementen geht.
Danke für Hilfe.
1 Antwort
- Wenn du die ganze Liste durchlaufen willst und < testest, musst du nicht noch 1 von der Größe abziehen.
- Die innere Schleife sollte nur bis j<i-1 gehen.
- Die äußere Schleife sollte das Array rückwärts durchlaufen.
Anbei eine etwas angepasste Version, die auch std::vector verwendet, damit die array-Größe nicht separat übergeben werden muss.
void bubbleSort (std::vector < int >&array)
{
for (int i = array.size (); i > 1; i--){
bool swapped = false;
for (int j = 0; j < i - 1; j++){
if (array[j] > array[j + 1]){
int temp = array[j];
array[j] = array[j + 1];
array[j + 1] = temp;
swapped = true;
}
}
if (!swapped){
return;
}
swapped = false;
}
}
Ja danke ich verstehe es aber ich bräuchte es in C. Habs aber schon. Trotzdem danke.