我该如何基于迭代器进行简单的快速排序。每次运行时,它要么排序错误,要么给我奇怪的数字,这些数字不属于收藏范围。什么可以解决?
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)
答案 0 :(得分:0)
经过一个小时的调试,我将数据透视表更改为c++ T pivot = *(i + (j - i) / 2);
,现在可以正常工作了。谢谢大家的支持!