void QuickSort(Type a[],int p,int r)
{
if(px, x放中间
while(1)
{
while(a[++i]<=x&&ix的数位置下标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);
}
快速排序算法的性能取决于划分的对称性。通过修改算法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);
}



