排序之快速排序(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);

} 

 

你可能感兴趣的:(快速排序)