快速排序习题

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)


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值