Rekursive Bubble-Sort in C
Ich bin nicht in der Lage den Fehler zu finden in dem silly rekursive bubble-sort-code unten. Kann jemand sagen, warum es nicht richtig funktioniert? Vielen Dank im Voraus.
#include <stdio.h>
int b[8] = { -9, 9, 89, 78, 56, 45, 34, 89 };
void print(int n)
{
int i;
for (i = 0; i < n; i++)
printf("%d\t", b[i]);
printf("\n");
}
void rb(int n)
{
if(n == 0)
return;
int i, j;
for (i = 0; i < n - 1; i++) {
if (b[i + 1] > b[i])
j = b[i + 1];
b[i + 1] = b[i];
b[i] = j;
}
rb(n - 1);
}
int main()
{
print(8);
rb(8);
print(8);
return 0;
}
- Die 3 Aussagen, die die swap-müssen drin sein
{...}
so werden Sie alle unterliegen denif
. Und dieif
test ist rückwärts auch wenn Sie sind mit dem Ziel, die Nummern in aufsteigender Reihenfolge. - Ich Frage die Nützlichkeit der re-Formatierung bearbeitet, wenn das original irreführend (und in der Regel miese) Senkung war wohl ein Teil des Problems in den ersten Platz.
- Ja, wie kann ich vermisse Klammern...dumm...extrem schlechte Frage .
- Einfach nicht downvote, weil ich m nicht in der Lage, es zu löschen.
- Dies hätte vermieden werden können, die von verwenden Sie immer Klammern, wenn-dann,. Alternativ könnte man eine richtige IDE, die korrekte Einrückung, da der Fehler ganz klar nach dem nil Bearbeiten. @WumpusQ. Wumbley ich gebe zu, ich hatte zu schauen, die edit-history zu verstehen, wie die OP könnte es verpasst haben, mit, dass offensichtlich die Einrückung, aber ich denke, dass null-edit-war positiv, da der Fehler blieb.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ihre if-Anweisung in der for-Schleife sieht wirklich wie diese unten hinzufügen müssen, " {" und "}" um die drei Zeilen code, das macht das tauschen. Auch da j nur in der swap-Teil des Codes. wenn Sie hatte Gültigkeitsbereich 'j' innerhalb des 'if' - block. würde der compiler gefunden habe, dieses Problem.
Ihre for-Anweisung behoben werden muss.
Wenn Sie ändern Ihre Funktion rb() der code unten funktioniert es für mich, die Sortierung vom größten zum kleinsten.
Ausgabe: