最开始敲的是以最右边为基准数的快排,是不会过的;后来发现O2可以过了之后,看了看其他小伙伴的方法,试着把数组放在外边,并让中间的那个数作为基准数,但是现在开始4个MLE,1个RE了...我就去VS里试了试,发现它提示我栈溢出...可我真的看不出来哪里出了问题呀,求助--
代码如下:
#include <stdio.h>
int a[100005];
void qs (int left,int right)
{
if (left >= right) return ;
int l=left,r=right,ou=a[(left+right)/2],temp;
do
{
while (ou<=a[r]) r--;
while (a[l]<=ou) l++;
if (l<=r)
{
temp=a[l];
a[l]=a[r];
a[r]=temp;
l++;
r--;
}
}while (l<=r);
qs (left,l);
qs (l,right);
}
int main()
{
int n;
scanf("%d",&n);
for (int i=0;i<n;i++) scanf ("%d",&a[i]);
qs (0,n-1);
for (int i=0;i<n;i++) printf("%d ",a[i]);
return 0;
}