排序之快速排序(1)
快速排序的思路是:首先拿a[start]作为轴,将原数组中比a[start]小的放small数组,将原数组中比a[start]大的放big数组,最后在将small数组 和a[start]值和big数组中的数复制回原数组。以此递归,使数组逐渐有序。 快速排序的平均时间复杂度是nlogn。 #include<stdio.h> #include<stdlib.h> #define N 1000000 int array[N]; int small[N]; int big[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,0,N-1); 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 n) { quick_sort(a,0,n-1); } void quick_sort(int a[],int start,int end) { if(start>=end) return; int mid; int temp,i,j=0,k=0; temp=a[start]; for(i=start+1;i<=end;i++) { if(a[i]<=temp) { small[j++]=a[i]; } else { big[k++]=a[i]; } } mid=start+j; for(i=0;i<j;i++) { a[start+i]=small[i]; } a[mid]=temp; for(i=0;i<k;i++) { a[mid+1+i]=big[i]; } quick_sort(a,start,mid-1); quick_sort(a,mid+1,end); }