Ich versuche, ein Quicksort für ein Array von Zeichenfolgen zu implementieren, aber es scheint, dass es das Array sortiert, aber in umgekehrter Reihenfolge, frage ich mich, warum ist das und wie kann ich dieses Problem lösen, um es normal zu sortieren ... Das ist meine Implementierung:Warum sortiert mein Quicksort das Array in umgekehrter Reihenfolge?
public class Main {
public static void main(String[] args) {
String[] list = {"a", "f", "c", "b"};
quickSort(list, 0, list.length - 1);
for (String s : list) {
System.out.println(s);
}
}
private static void quickSort(String[] list, int start, int end) {
if (start < end) {
int pIndex = partition(list, start, end);
quickSort(list, start, pIndex - 1);
quickSort(list, pIndex + 1, end);
}
}
private static int partition(String[] list, int start, int end) {
String pivot = list[end];
int leftCounter = start;
int rightCounter = end;
while (leftCounter < rightCounter) {
while (list[leftCounter].compareTo(pivot) <= 0 && leftCounter < end && rightCounter > leftCounter) {
leftCounter++;
}
while (list[rightCounter].compareTo(pivot) >= 0 && rightCounter > start && rightCounter >= leftCounter) {
rightCounter--;
}
if (leftCounter < rightCounter) {
swap(list, leftCounter, rightCounter);
}
}
swap(list, start, end);
return end;
}
private static void swap(String[] list, int start, int end) {
String aux = list[start];
list[start] = list[end];
list[end] = aux;
}
}
Ich bin auf der Suche über den Code, aber zum Thema quicksort, gibt es eine ziemlich faszinierende neue (-ish) Version namens [Dual-Pivot Quicksort] (https://dzone.com/articles/algorithm-week-quicksort-three). Es wurde kürzlich in die Core-Bibliothek von Java integriert. Sie können das Original Whitepaper [hier] (https://web.archive.org/web/20150929115744/http://iaroslavski.narod.ru/quicksort/) erhalten. – CodeMouse92
Der Rückgabewert Ihrer Partition ist falsch. – user2357112
Eigentlich bin ich neugierig, warum Sie Ihre "sollte ich tauschen?" abhängig von Ihren INDEXES, nicht von ihren WERTEN. 'leftCounter
CodeMouse92