И что сделать простой быстрой сортировкой на основе итераторов. Каждый раз, когда я запускаю его, он либо сортирует неправильно, либо выдает мне странные числа, которые не являются частью коллекции. Что можно исправить?
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)