Почему моя быстрая сортировка не работает правильно? - PullRequest
0 голосов
/ 11 октября 2019

И что сделать простой быстрой сортировкой на основе итераторов. Каждый раз, когда я запускаю его, он либо сортирует неправильно, либо выдает мне странные числа, которые не являются частью коллекции. Что можно исправить?

template <typename I, typename C>
void quickSort(I begin, I end, C cmp) {
    if (begin >= end) throw new exception_incorrectSelection;
    I i = begin, j = end, pivot = i + (j - i) / 2;
    while (i <= j) {
        while (cmp(*i, *pivot)) ++i;
        while (cmp(*pivot, *j)) --j;
        if (i <= j) {
            std::iter_swap(i, j);
            ++i;
            --j;
        }
    }
    if (j > begin) {
        quickSort(begin, j, cmp);
    }
    if (i < end) {
        quickSort(i, end, cmp);
    }
}

На входе 1 80 12 23 14 69 69 42 19 3 50 24 19 71 53 52 46 63 79 он дает мне вывод 80 79 69 54 69 42 23 19 14 12 71 63 53 52 50 46 24 19 3 1 (если я задаю второй параметр как end () - 1)

1 Ответ

0 голосов
/ 11 октября 2019

После часа отладки я изменил pivot на c++ T pivot = *(i + (j - i) / 2);, и теперь он работает. Спасибо всем за поддержку!

...