Quicksort
-
hallo miteinander,
kann mir jemand verraten, was an folgendem quicksort falsch ist?
index=anzahl-1; int* quicksort (int *feld, int index) { int buffer = 0; int pivot = 0; int *pointer_kl; int *pointer_gr; int versatz = 0; if (index > 0) { pivot = feld[index/2]; pointer_kl = feld + index; pointer_gr = feld; do { while (*pointer_gr<=pivot && pointer_gr != pointer_kl) { pointer_gr++; } while (*pointer_kl>=pivot && pointer_kl != pointer_gr) { pointer_kl--; } buffer = *pointer_gr; *pointer_gr = *pointer_kl; *pointer_kl = buffer; } while (pointer_gr<pointer_kl); versatz = pointer_gr - feld; if (versatz > (index/2) && feld[versatz] > pivot) { versatz = versatz-1; } feld[index/2] = feld[versatz]; feld[versatz] = pivot; quicksort(feld, (versatz - 1)); //Rekursion quicksort(feld + (versatz + 1), index - (versatz + 1)); } else { return feld; } }
-
Eigentlich ist es eher üblich, dass du uns sagst, was falsch ist und wir dir sagen, wie es richtig ginge.
-
Das geschilderte Problem hat nichts mit C zu tun; stelle deine Frage im passenden Subforum.
-
Habe meinen Fehler nun gefunden, der quicksort an sich funktioniert. Der Fehler liegt in meiner main.
Was nicht funktioniert:
fertig=quicksort(zahlen, index); printf("\nFeldinhalt sortiert:\n"); for (int i = 0; i<anzahl; i++)printf("wert:%d\n", i, fertig[i]);
Was funktioniert:
quicksort(zahlen, index); printf("\nFeldinhalt sortiert:\n"); for (int i = 0; i<anzahl; i++)printf("wert:%d\n", i, zahlen[i]);
Wäre aber nett, wenn mir jemand erklären könnte, warum nur die untere
Variante funktioniert
-
Dann schau mal nach, was und wann du etwas aus quicksort zurück gibst.
Und wie du deine Funktion aufrufst.