快速排序也是分而治之的思想,是所有的内排中最好的一种。
#include<stdio.h>
int quick(int a[],int start,int end);
void sort(int a[],int start,int end);
void main()
{
int a[5]= {12,45,2,13,42};
for(int i=0; i<5; i++)
printf("%d\t",a[i]);
printf("\n");
sort(a,0,4);
for(int i=0; i<5; i++)
printf("%d\t",a[i]);
}
int quick(int a[],int start,int end)
{
int i=start;
int j=end;
while(j>i)
{
while(a[j]>a[i]&&j>i)j--;
if(j>i)
{
int temp;
temp=a[i];
a[i]=a[j];
a[j]=temp;
}
while(a[j]>a[i]&&j>i)i++;
if(j>i)
{
int temp;
temp=a[i];
a[i]=a[j];
a[j]=temp;
}
}
return i;
}
void sort(int a[],int start,int end)
{
if(end>start)
{
int w=quick(a,start,end);
quick(a,start,w-1);
quick(a,w+1,end);
}
}
快排的趟数取决于递归的深度,最好的情况下是O(log2n),最差的情况下是O(n),平均O(log2n)