题目要求实现1000000内的数的快速排序。这里的方法用了多个数组,还有一种只用一个数组的方法。
#include <stdio.h>
#include <stdlib.h>
#define N 1000000
int a[N];
int a1[N];
int a2[N];
void random_array(int a[],int n)
{
int i;
for(i=0;i<n;i++)
a[i]=random()%n;
}
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 left,int right)
{
if(left>=right)//递归终止条件
return;
int i=left+1;
int j=right;
int k1=0,k2=0,k=0;
int middle=a[left];
while(i<=j)//把数组里的数据放在midelle两边
{
if(a[i]<middle)
a1[k1++]=a[i++];
else
a2[k2++]=a[i++];
if(a[j]<middle)
a1[k1++]=a[j--];
else
a2[k2++]=a[j--];
}
for(i=left,k=0;k<k1;i++,k++)
a[i]=a1[k];
a[i]=middle;
for(i=left+k1+1,k=0;k<k2;i++,k++)
a[i]=a2[k];
quick_sort(a,left,left+k1-1);
quick_sort(a,left+k1+1,right);
}
void my_qsort(int a[],int n)//改变一下接口,使之符合题目要求
{
quick_sort(a,0,n-1);
}
int main()
{
random_array(a,N);
//print_array(a,N);
//printf("\n");
my_qsort(a,N);
print_array(a,N);
}