При запуске кода во время qSort происходит исключение stack overflow
using namespace std;
int arrB[10000];
int arrA[10000];
void qSort(int* a, int* b) {
int x = *(a + (b - a) / 2); // x - опорный
int* p = a;
int* q = b - 1;
do {
while (*p < x) ++p; // поиск элемента для переноса
while (*q > x) --q; // поиск элемента для переноса
if (p < q) { // обмен элементов местами:
swap(*p, *q);
++p; --q; // переход к следующим элементам:
}
} while (p < q);
if (a < q) qSort(a, q + 1);
if (p < b - 1) qSort(p, b);
}
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
int n, m, k;
cin >> n >> m >> k;
for (int i = 0; i < n; i++) {
int a;
cin >> a;
arrA[i] = a;
}
qSort(arrA, arrA + n);
for (int i = 0; i < n; i++) {
cout << arrA[i]<<" ";
}
return 0;}
Ответы (1 шт):
Автор решения: MBo
→ Ссылка
while (*p < x) ++p; // поиск элемента для переноса
Что произойдёт, если опорный элемент - самый маленький?
Цикл выйдет за пределы массива, вот вам и access violation, и всё, что угодно.
Аналогично со следующей строкой.
Нужно предусмотреть дополнительные условия - например, (p < q)