写完题解代码,提示我超出内存限制,你们帮我看看哪里需要改,还是说我的代码就是错的。
我用的是双指针从数组两端往中间靠拢。
#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