Массив: 4,1,5,8,2,6,9,7,11,3
public static void quickSort(int arr[], int low, int high) {
System.out.println(low + " " + high);
while(low < high) {
int mid = quickPart(arr, low, high);
quickSort(arr, low, mid - 1);
quickSort(arr, mid + 1, high);
}
}
печатается: 0 0, затем 2 1, затем снова 0 0 и 2 1 и т. Д. Для Сопл (низкий + "" + высокий)
, но для ..
public static void quickSort(int arr[], int low, int high) {
System.out.println(low + " " + high);
if(low < high) {
int mid = quickPart(arr, low, high);
quickSort(arr, low, mid - 1);
quickSort(arr, mid + 1, high);
}
}
это печать: 0 9, 0 1, 0 0, 2 1, 3 9, 3 3, 5 9 ... это нормально.
код разделения, если это помогает ..
public static int quickPart(int arr[], int low, int high) {
int pivot = arr[high];
int i = low - 1;
for(int j = low; j < high; j++) {
if(pivot > arr[j]) {
i++;
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
int temp = arr[i+1];
arr[i+1] = arr[high];
arr[high] = temp;
System.out.println(i++);
return i+1;
}
Для оператора if код завершится, как только low> = high , и для этого он достигнет 9, т. Е. 9> 9 завершится, но для while + разбиение алгоритм его печати 1 в повторении. Почему так себя ведет?