Я пытаюсь реализовать quicksort для массива строк, но кажется, что он сортирует массив, но в обратном порядке, мне интересно, почему это так и как я могу решить эту проблему, чтобы сортировать ее нормально ... Это моя реализация:Почему мой quicksort сортирует массив в обратном порядке?
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;
}
}
Я глядя на ваш код, но на тему сортировки, есть довольно увлекательная новая версия (-ish), называемая [double-pivot quicksort] (https://dzone.com/articles/algorithm-week-quicksort-three). Недавно он был включен в базовую библиотеку Java. Вы можете получить исходный документ [здесь] (https://web.archive.org/web/20150929115744/http://iaroslavski.narod.ru/quicksort/). – CodeMouse92
Возвращаемое значение вашего раздела выглядит неправильно. – user2357112
На самом деле, мне любопытно, почему вы основываете свое «я должен поменяться»? условно от ваших ПОКАЗАТЕЛЕЙ, а не от их ЦЕННОСТЕЙ. 'leftCounter
CodeMouse92