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

}

  

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