原版本:(被排序好的数组卡了)
int n;
int a[109];
void Sort(int left,int right){
if(left>=right)return;
int tmp=a[left];
int l=left,r=right;
while(l!=r){
while(l!=r&&a[r]>=tmp)r--;
while(l!=r&&a[l]<=tmp)l++;
swap(a[l],a[r]);
}
a[left]=a[l];
a[l]=tmp;
Sort(left,l-1);
Sort(l+1,right);
}
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
Sort(1,n);
for(int i=1;i<=n;i++)
printf("%d ",a[i]);
return 0;
}
优化后:(以中间值作为标准)
int a[maxn];
void quick_sort(int l,int r){
if(l>=r)return ;
int tmp=a[l+r>>1];
int i=l,j=r;
while(i<=j){
while(a[i]<tmp)i++;
while(a[j]>tmp)j--;
if(i<=j){
swap(a[i],a[j]);
i++;j--;
}
}
if(l<j)quick_sort(l,j);
if(r>i)quick_sort(i,r);
}
int main(){
int n=rd;
rep(i,1,n)a[i]=rd;
quick_sort(1,n);
rep(i,1,n)
printf("%d%c",a[i]," \n"[i==n]);
return 0;
}
/*_________________________________________________________end*/