public void sort() {
quickSort(0, array.length - 1);
}
private void quickSort(int left, int right) {
if (right - left <= 0) return;
int partition = partition(left, right, array[(left + right) / 2]);
quickSort(left, partition - 1);
quickSort(partition + 1, right);
}
public int partition(int leftIndex, int rightIndex, int pivot) {
leftIndex = leftIndex - 1;
rightIndex = rightIndex + 1;
while (true) {
while (leftIndex < rightIndex && array[++leftIndex] < pivot);
while (rightIndex > leftIndex && array[--rightIndex] > pivot);
if (leftIndex >= rightIndex)
break;
else
swap(leftIndex, rightIndex);
}
return leftIndex;
}
private void swap(int leftIndex, int rightIndex) {
int temp = array[leftIndex];
array[leftIndex] = array[rightIndex];
array[rightIndex] = temp;
}
Алгоритм разбиения я взял с книги. Оно вроде правильно работает. Но почему быстрая сортировка
иногда даёт неправильный результат?