快速排序的思路是:首先拿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);
}