二分及快速排序 PPT.pptxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

二分及排序

CopyRightbyCDD

2017年11月28日;

二分查找

【例6.10】找数。给一个长度为n的单调增的正整数序列,即序列中每一个数都比前一个数大。有m个询问,每次询问一个x,问序列中最后一个小于等于x的数是什么?

输入格式:第1行,两个整数n,m;接下来一行n个数,表示这个序列;

接下来m行每行一个数,表示一个询问。

输出格式:输出共m行,表示序列中最后一个小于等于x的数是什么。写如没有,则输出-1。

输入样例:

53

12346

5

1

3

输出样例:

4

1;

二分查找

分析:我们用Left表示询问区间的左边界,用Right表示询问区间的

右边界,[Left,Right]组成询问区间。一开始Left=1,Right=n,序列已

经按照升序排好,保证了二分的有序性。

每一次二分,我们这样来做:

(1)取区间中间值Mid=(Left+Right)/2。

(2)判断a[Mid]与x的关系,如果a[Mid]x,由于序列是升序排列,所以区间[Mid,Right]都可以被排除,修改右边界Right=Mid-1。

(3)如果a[Mid]=x,修改左边界Left=Mid+1。重复执行二分操作直到LeftRight。

下面我们来分析答案的情况,循环结束示意图如图6.19所示。;

//eg6.10

#includeiostream

usingnamespacestd;

intn,m,a[110000];

intmain()

{

cinnm;

for(inti=1;i=n;i++)cina[i];a[0]=-1;

for(inti=1;i=m;i++)

{

intX;

intleft=1,right=n,mid;

cinX;

while(left=right)

{

mid=(left+right)/2;

if(a[mid]=X)left=mid+1;elseright=mid-1;

}

couta[right]endl;

}

return0;

};

二分查找

【例6.11】月度开销。农夫约翰是一个精明的会计师。他意识到自己可能没有足够的钱来维持农场的运转了。他计算出并记录下了接下来N(1≤N≤100,000)天里每天需要的开销。约翰打算为连续的M(1≤M≤N)个财政周期创建预算案,他把一个财政周期命名为fajo月。每个fajo月包含一天或连续的多天,每天被恰好包含在一个fajo月里。约翰的目标是合理安排每个fajo月包含的天数,使得开销最多的fajo月的开销尽可能少。

输人格式:第1行,包含两个整数N,M,用单个空格隔开;接下来N行,每行包含一个1到10000之间的整数,按顺序给出接下来N天里每天的开销。

输出格式:一个整数,即最大月度开销的最小值。

输入样例:

75

100

400

300

100

500

101

400

输出样例:;

二分查找

分析:不妨设ok(i)表示是否存在一种方案使得开销最多的fajo月的开销小于等于i。判断ok(i)可以用贪心法,从左到右扫描每一天的开销,采用“物尽其用”原则,在不超过i的前提下让每一个fajo月的天数越多越好,如果最终得到的预算案小于等于M,则ok(i)=1,答案可以比i再小一些,如果大于M,则ok(i)=0,答案要比i大一些。这就满足了二分的有序性。

用L表示二分区间左边界,R表示右边界,当

文档评论(0)

乐毅淘文斋 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:8121131046000040

1亿VIP精品文档

相关文档