快速排序
快速排序和归并排序一样,都来自分治法的思想,由于快速排序在时间复杂度为O(n*logn)的几种排序算法中效率较高,因此被经常采用。
快速排序的思想在实际的生活中经常遇到:有一堆面额不等的钞票,要把它们从小到大排序,首先可以找出一张作为基准,比它面额小的都放在左边,比它面额大的都放在右边,这时再把左右两边的进行二次处理,知道排序完成。
快速排序的步骤可以总结为如下三步:
1.找出一个基准数据
2.把比该数据小的都放在该数据左边,比该数据大的都放在该数据右边
3.重复步骤2,直到每个分组都只有一个数据
代码:
void quicksort(int s,int t,int a[])
{
int i=s,j=t,x=a[(i+j)/2],y;
print2(a,s,t);
do {
while(a[i]<x)
i++;
while(a[j]>x)
j--;
if(i<=j)
{
y=a[j];
a[j]=a[i];
a[i]=y;
i++;j--;
}
}while(i<j);
if(j>s)
quicksort(s,j,a);
if(i<t)
quicksort(i,t,a);
}