Я пытаюсь отсортировать этот массив быстрой сортировкой:
int[] arr = {25,23,21,29,28,22,24,27};
Моя функция быстрой сортировки:
public static void quickSort(int[] arr) { // sorts array using quick sort algorithm
if (arr[0] < arr[arr.length-1]) {
int s = hoarePartitioning(arr);
quickSort(Arrays.copyOfRange(arr, 0, s-1));
quickSort(Arrays.copyOfRange(arr, s+1, arr.length));
}
}
Я использовал Hoare Partitioning:
public static int hoarePartitioning(int[] arr) {
int pivot = arr[0];
int i = 0;
int j = arr.length;
do {
do {i++;} while(pivot >= arr[i] && i < arr.length);
do {j--;} while(pivot <= arr[j] && j >= 0);
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}while(i <= j);
int temp = arr[i]; //undo last swap when i >= j
arr[i] = arr[j];
arr[j] = temp;
temp = arr[0];
arr[0] = arr[j];
arr[j] = temp;
return j;
}
Однако, когда я распечатываю массив, это результат:
22 23 21 24 25 28 29 27
Моя функция разбиения Hoare работает нормально, но я до сих пор не понимаю, почему массив не отсортирован. Что я здесь не так делаю? Спасибо.