1.修改快速排序中的PATION算法,使得返回q,t,其中p<=q<=t<=r.下标小于q的都小于主元,大于t的都大于主元,在q~t之间的等于主元
PATION A,p,r
q=p-1;
t=q;
for(int i=0;i<r-1;i++)
{
if(A[i]==A[r])
{
t++;
swap(A,i,t);
}
else if(A[i]<A[r])
{
t++;
swap(A,i,t);
q++;
swap(A,t,q);
}
}
t++;
swap(A,t,r);
2.对区间的模糊排序
我们知道一系列数的大致区间,怎样对这些区间进行排序使得每个区间至少有一个数Ci,满足C1<=C2<=C3.....<=Cn
对于这个问题可以得出这样的结论,两个区间一旦有重叠,那么这两个区间就不用比较大小,因为不管怎么样都会在重叠区间张找到一两个数,使得大小不确定
那么对于一个区间来说,对所有区间进行一次划分,可以得到三种结果
- 区间比主元区间小
- 区间比主元区间大
- 和主元区间有重叠
那么可以利用上个问题中的方法实现这一效果,得到两个分界线分别为q,t
时间复杂度分析
- 对于一个重叠区间较少的情况,它的性能和快速排序一样为O(NlogN)
- 当区间重叠较多的时候,有限次遍历就能将区间排好序,时间复杂度为O(N)