При запуске кода во время 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)

→ Ссылка