快速排序
【最终版】
#include<cstdio>
#include<algorithm>
using namespace std;
int a[100050],n;
void Qsort(int l,int r){
int mid=a[(l+r)/2],i=l,j=r;
while(i<=j){
while(a[i]<mid)i++;
while(a[j]>mid)j--;
if(i<=j){swap(a[i],a[j]);i++;j--;}
}
if(i<r)Qsort(i,r);
if(l<j)Qsort(l,j);
}
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++)scanf("%d",&a[i]);
Qsort(1,n);
for(int i=1;i<=n-1;i++)printf("%d ",a[i]);
printf("%d\n",a[n]);
return 0;
}
快速排序=挖坑填数+分治法
【举例】
66 13 51 76 81 26 57 69 23
23 13 51 57 26 66 81 69 76
【C++版】
void Qsort(int L,int R){
int i=L,j=R,t=a[i]; //在i处挖坑
while(i<j){
while(i<j && a[j]>=t)j--;
if(i<j){a[i]=a[j]; i++; } //挖j填i
while(i<j && a[i]<=t)i++;
if(i<j){a[j]=a[i]; j--; } //挖i填j
}
a[i]=t; //填i
if(l<i-1) Qsort(l,i-1);
if(r<j+1) Qsort(i+1,r);
}

浙公网安备 33010602011771号