为什么我的快速排序无法正常工作?

时间:2019-10-11 18:40:15

标签: c++ quicksort

我该如何基于迭代器进行简单的快速排序。每次运行时,它要么排序错误,要么给我奇怪的数字,这些数字不属于收藏范围。什么可以解决?

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 :(得分:0)

经过一个小时的调试,我将数据透视表更改为c++ T pivot = *(i + (j - i) / 2);,现在可以正常工作了。谢谢大家的支持!