快速排序(实现)
View Code
1 #include<stdio.h> 2 #define N 20005 3 int n,a[N]; 4 void quick_sort(int low,int up){ 5 int i,j,tmp; 6 if(low<up){ 7 i=low; 8 j=up; 9 tmp=a[low]; 10 while(i!=j){ 11 while(i<j&&a[j]>tmp) 12 j--; 13 if(i<j) a[i++]=a[j]; 14 while(i<j&&a[i]<=tmp) 15 i++; 16 if(i<j) a[j--]=a[i]; 17 } 18 a[i]=tmp; 19 quick_sort(low,i-1); 20 quick_sort(i+1,up); 21 } 22 return ; 23 } 24 25 int main(){ 26 int i; 27 scanf("%d",&n); 28 for(i=0;i<n;i++) scanf("%d",&a[i]); 29 quick_sort(0,n-1); 30 for(i=0;i<n;i++){ 31 if(i==0) printf("%d",a[i]); 32 else printf(" %d",a[i]); 33 } 34 printf("\n"); 35 return 0; 36 }
主要思想:先确定一个tmp值,然后找到一个位置,是的tmp在这个位置上,并且左边的全都不比它大,右边的比它小。
keep moving...