Сортировка массива методом Хоара. Почему неправильно работает алгоритм?

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;
    }

Алгоритм разбиения я взял с книги. Оно вроде правильно работает. Но почему быстрая сортировка иногда даёт неправильный результат?
  • Вопрос задан
  • 67 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы