快速排序超过内存限制

写完题解代码,提示我超出内存限制,你们帮我看看哪里需要改,还是说我的代码就是错的。

我用的是双指针从数组两端往中间靠拢。

#include<iostream>
using namespace std;
const int N=1e6+10;
int n;
int a[N];
void quick_sort(int q[],int l,int r)
{
    if(l>=r)return;
    int st=q[(l+r+1)/2],i=l-1,j=r+1;
    while(i<j)
    {
        do i++;while(q[i]<st);
        do j--;while(q[j]>st);
        if(i<j)swap(q[i],q[j]);
    }
    quick_sort(q,l,j);
    quick_sort(q,j+1,r);
}
int main()
{
    scanf("%d",&n);
    for(int i=0;i<n;i++)
    scanf("%d",&a[i]);
    quick_sort(a,0,n-1);
    for(int i=0;i<n;i++)
    printf("%d ",a[i]);
    return 0;
}

 

看一下swap函数有没有问题

说实话我觉得用vector可能传引用的时候更方便一点....

void quick_sort(vector<int> &q, int l, int r){
    // TODO
}

>const int N=1e6+10;

这是多大的数组? 

请看: https://blog.csdn.net/zfjBIT/article/details/88638547  https://blog.csdn.net/a479778594/article/details/70157121