Я пытался реализовать этот код с итераторами в C ++.Он отлично работает, например, для std :: less <> () в качестве компаратора, но дает неверные результаты при использовании std :: большее <> ().Моя реализация неверна?
template <typename RandomIt, typename Compare>
void QuickSort(RandomIt first, RandomIt last, Compare compare)
{
if (std::distance(first, last) <= 1) return;
RandomIt bound = Partition(first, last, compare);
QuickSort(first, bound);
QuickSort(bound, last);
}
template <typename RandomIt, typename Compare>
RandomIt Partition(RandomIt first, RandomIt last, Compare compare)
{
auto pivot = std::prev(last, 1);
auto i = first;
for (auto j = first; j != pivot; ++j)
if (compare(*j, *pivot))
std::swap(*i++, *j);
std::swap(*i, *pivot);
return i;
}
Редактировать:
Пример ввода, используя std::greater
: 1, 2, 3
Ожидаемый: 3, 2, 1
Фактический: 1, 2, 3