F
fragejava
Gast
Hallo,
bei Quicksort ist es doch so, dass in einem Rekursionsschritt alle Elemente in der linken Teilhälfte kleiner gleich dem Pivotelement sind und alle rechten Teilhälfte-elemente größer dem Pivotelement sind. Anschließend steht das Pivotelement an der richtigen Stelle.
So implementiert:
Wenn ich damit aber teste, bekomme ich als Ergebnis "ungefähr" sortierte Arrays (nicht ganz durcheinander, aber aber auch nicht ganz sortiert).
Den Fehler kann ich nicht nachvollziehen, da m.M.n. nach jedem Durchlauf der äußeren while-Schl. gilt, dass alle Elemente mit Index < l kleiner gleich dem Pivotelement sind und alle Elemente mit Index > l größer gleich dem Pivotelement sind. Wenn das Pivotelement dann auch noch auf die Stelle l gesetzt wird, ist es richtig einsortiert. Wo ist der Fehler?
bei Quicksort ist es doch so, dass in einem Rekursionsschritt alle Elemente in der linken Teilhälfte kleiner gleich dem Pivotelement sind und alle rechten Teilhälfte-elemente größer dem Pivotelement sind. Anschließend steht das Pivotelement an der richtigen Stelle.
So implementiert:
Java:
public static <T> void quicksort(T[] array, Comparator<T> comp) {
quicksort(array, comp, 0, array.length - 1);
}
private static <T> void quicksort(T[] array, Comparator<T> comp, int anfang, int ende) {
if (anfang >= ende) {
return;
}
int m = anfang + (ende - anfang) / 2;
int l = anfang;
int r = ende;
while (l < r) {
while (l < r && comp.compare(array[l], array[m]) <= 0) {
l++;
}
while (l < r && comp.compare(array[r], array[m]) >= 0) {
r--;
}
if (l < r) {
swap(array, l, r);
}
}
if (comp.compare(array[l], array[m]) != 0) {
swap(array, l, m);
}
quicksort(array, comp, anfang, l - 1);
quicksort(array, comp, l + 1, ende);
}
Wenn ich damit aber teste, bekomme ich als Ergebnis "ungefähr" sortierte Arrays (nicht ganz durcheinander, aber aber auch nicht ganz sortiert).
Den Fehler kann ich nicht nachvollziehen, da m.M.n. nach jedem Durchlauf der äußeren while-Schl. gilt, dass alle Elemente mit Index < l kleiner gleich dem Pivotelement sind und alle Elemente mit Index > l größer gleich dem Pivotelement sind. Wenn das Pivotelement dann auch noch auf die Stelle l gesetzt wird, ist es richtig einsortiert. Wo ist der Fehler?
Zuletzt bearbeitet von einem Moderator: