#include<iostream>
#include<cmath>
#include<cstring>
#include<cstdlib>
#include<stdio.h>
#include<malloc.h>
#include<ctime>
using namespace std;
long long a[1000001];
void quicksortshow(long long *a,long long n);
struct stu
{
long long number;
long long l,r;
struct stu *next;
};
int len=sizeof(struct stu);
void swapn(long long *a,long long *b)
{
long long tmp;
tmp=*a;*a=*b;*b=tmp;
}
void insertsort(long long *a,long long l,long long r)
{
long long i=l,j=r,mid,tmp;
mid=(i+j)/2;
int flag=1;
for(;i<=r-1&&flag;i++)
{
tmp=i;
flag=0;
for(j=i+1;j<=r;j++)
{
if(a[tmp]>a[j])
{tmp=a[j];flag=1;}
}
if(flag)
swapn(&a[i],&a[tmp]);
}
}
void insertSort(long long *a, long long left, long long right)
{
for (long long i = left + 1; i <= right; i++)
for (long long j = i; j > 0 && a[j] < a[j-1]; j--)
swapn(&a[j],&a[j-1]);
}
long long seakmain(long long *a,long l,long r)
{
long long mid;
/*将中间值放最后*/
mid=(l+r)/2;
//mid = l + ((r - l) >> 1);
if(a[l]>a[mid])
swapn(&a[l],&a[mid]);
if(a[l]>a[r])
swapn(&a[l],&a[r]);
if(a[mid]>a[r])
swapn(&a[mid],&a[r]);
swapn(&a[mid],&a[r]);
return a[r];
}
void quicksort(long long *a,long long l,long long r)
{
long long stander,le,ri;
if(r-l+1<10)
{
insertSort(a,l,r);
return;
}
else
{
if(l<r)
{
le=l;
ri=r-1;
stander=seakmain(a,l,r);//找基准
while(1)
{
while(le<ri&&a[le]<=stander)
le++;
while(le<ri&&a[ri]>=stander)
ri--;
if(le<ri)
{swapn(&a[le],&a[ri]);}//求教:当后面加上j--后3、4能过(1、2不能)
//不加则1、2能过,3、4不能过
else
break;
}
//cout<<"paixu3\n"<<endl;
swapn(&a[le],&a[r]);
//quicksortshow(a,10);
quicksort(a,l,le-1);
quicksort(a,le+1,r);
}
}
}
void quicksortshow(long long *a,long long n)
{
long long i=0;
while(i<n-1)
{
printf("%lli ",a[i]);
i++;
}
printf("%lli\n",a[i]);
}
int main()
{
long long i=0,j,n,num,firststu=1;
//srand((int)time(NULL));
//long long b[10]={9,8,3,6,1,0,2,4,5,7};
//long long c[10]={1,1,1,1,1,1,1,1,1,1};
//int tt;
cin>>n;
for(i=0;i<n;i++)
{
//a[i]=m-i;
cin>>a[i];
}
//cout<<"原始数据\n";
//quicksortshow(a,10);
quicksort(a,0,n-1);
quicksortshow(a,n);
return 0;
}
向大佬请教quicksort函数第94行while循环里if判断语句,在交换后加上j--只能过3、4,不加只能过1、2,请问问题出哪里