Объясните пожалуйста, по какой причине если возвращать j, у левого предела как и у правого не учитывать опорный элемент и сортировать их, то выходит неправильная сортировка, если же вместо j возвращать i, QSort(arr, low, pivotindex - 1);
QSort(arr, pivotindex, high); и записывать сортировку левой и правой части так, то всё сортирует прекрасно, в чём проблема совсем не могу понять, объясните пожалуйста ! (Что не так с этой j, как это понять и додуматься, что нужно i)
import java.util.Arrays;
public class QuickSort {
public static void swap(int[] arr, int pos1, int pos2) {
int temp = arr[pos1];
arr[pos1] = arr[pos2];
arr[pos2] = temp;
}
public static int DaC(int[] arr, int low, int high) {
int pivot = arr[low + (high - low) / 2];
int i = low;
int j = high;
while (i <= j) {
while (arr[i] < pivot) {
i++;
}
while (arr[j] > pivot) {
j--;
}
if (i <= j) {
swap(arr, i, j);
i++;
j--;
}
}
return j;
}
public static void QSort(int[] arr, int low, int high) {
if (low < high) {
int pivotIndex = DaC(arr, low, high);
QSort(arr, low, pivotIndex - 1);
QSort(arr, pivotIndex + 1 , high);
}
}
public static void main(String[] args) {
int[] a = {10, 5, 3, 8, 6, 2, 7, 14, 9};
int size = a.length;
QSort(a, 0, size - 1);
System.out.println(Arrays.toString(a));
}
}