排序之快速排序(2)
这种快速排序的思路是:首先以a[start]为轴,不停得从数组的两端开始比较。从最右端开始,如果有比a[start]小的,那么赋值a[i];从最左端开始,如果有比a[start]大的,那么赋值a[j],以此往复,渐渐有序;注意的是递归跳出的条件,只有一个数就不需要排序,即start>=end #include<stdio.h> #include<stdlib.h> #define N 1000000 int array[N]; void init_array(int a[],int n); void print_array(int a[],int n); void quick_sort(int a[],int start,int end); void Quick_sort(int a[],int n); int main() { init_array(array,N); Quick_sort(array,N); print_array(array,N); } void init_array(int a[],int n) { int i; for(i=0;i<n;i++) a[i]=rand()%1000; } void print_array(int a[],int n) { int i; for(i=0;i<n;i++) printf("%d\n",a[i]); } void quick_sort(int a[],int start,int end) { int i,j,temp; if(start>=end) return; i=start; j=end; temp=a[start]; while(i<j) { while(i<j && a[j]>temp) j--; a[i]=a[j]; while(i<j && a[i]<=temp) i++; a[j]=a[i]; } a[i]=temp; quick_sort(a,start,i-1); quick_sort(a,i+1,end); } void Quick_sort(int a[],int n) { quick_sort(a,0,n-1); }