Я попытался реализовать алгоритм 3-way quicksort на C++, описанный here. Неудача Я получаю исключение STATUS_ACCESS_VIOLATION.STATUS_ACCESS_VIOLATION на 3-way quicksort (C++)
template<typename T, size_t SIZE>
void qsort(std::array<T, SIZE> &a, std::size_t lo, std::size_t hi) {
if (hi <= lo) {
return;
}
std::size_t lt = lo, gt = hi;
T v = a[lo];
std::size_t i = lo;
while (i <= gt) {
if (a[i] < v) {
std::swap(a[lt++], a[i++]);
} else if (a[i] > v) {
std::swap(a[i], a[gt--]);
} else {
i++;
}
}
qsort(a, lo, lt - 1);
qsort(a, gt + 1, hi);
}
template<typename T, size_t SIZE>
void quickSortThreeWay(std::array<T, SIZE> &a) {
std::size_t arraySize = sizeof(a)/sizeof(a[0]);
qsort(a, 0, arraySize - 1);
}
Массив - это std :: array, заполненный случайными значениями. Это отлично работает с другими алгоритмами.
Помогите найти проблему? Благодарю.
спасибо.
Укажите минимальный пример, включающий значения, вызывающие ошибку. См. Также рекомендации по переполнению стека. –
Вы пытались использовать отладчик? И, также, опишите мне, что произойдет в строке 'qsort (a, lo, lt - 1);' if 'lt' равно' 0'? –
* Массив - это std :: array, заполненный случайными значениями * - Вы должны начать с неслучайных известных значений и только 10 или менее от этих значений. Затем отлаживайте свой код, шаг за шагом, чтобы увидеть, где программа делает что-то неожиданное, что противоречит алгоритму. – PaulMcKenzie