快速排序算法是对冒泡排序的一种改进方法
void QuickSort(Type a[],int p,int r)
{
if(p<r)
{
int q=Partition(a,p,r);
QuickSort(a,p,q-1); //对左半端排序
QuickSort(a,q+1,r); //对右半段排序
}
}
int Partition(int a[],int p,int r)
{
int i = p,j = r + 1;
int t;
int x = a[p] //a[p]做划分基准
//将数据分为二部分 : 左边的元素<=x,右边的元素>x, x放中间
while(1)
{
while(a[++i]<=x&&i<r); //从左向右找>x的数位置下标i,找不到时i==r
while(a[--j]>x); //从右向左找<=x的数位置下标j,找不到时j==p
if(i>=j) break; //一遍扫描结束,退出循环
t=a[i];
a[i]=a[j];
a[j]=t;
}
a[p]=a[j]; //首元素a[p]与a[j]交换
a[j]=x; //x放在分界点
return j; //j是分裂位置
}
快速排序算法的性能取决于划分的对称性。通过修改算法partition,可以设计出采用随机选择策略的快速排序算法。可以在a[p,r]中随机选出一个元素作为划分基准。可以期望划分是较对称的。
int RandomizedPartition(int a[],int p,int r) { int i=Random(p,r); Swap(a[i],a[p]); return Partition(a,p,r); }