- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
分治算法
分治就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。任何一个可以用计算机求解的问题所需的计算时间都与其规模有关。问题的规模越小,越容易直接求解,解题所需的计算时间也越少。例如,对于n个元素的排序问题,当n=1时,不需任何计算。n=2时,只要作一次比较即可排好序。n=3时只要作3次比较即可,…。而当n较大时,问题就不那么容易处理了。要想直接解决一个规模较大的问题,有时是相当困难的。
第三条特征是关键,能否利用分治法完全取决于问题是否具有第三条特征,如果具备了第一条和第二条特征,而不具备第三条特征,则可以考虑用贪心法或动态规划法。
知识目标:理解二分查找算法的概念以及执行过程。
重点:掌握二分查找算法的常规写法以及递归写法。
边界错误造成的问题死循环
溢出
二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难。因此,折半查找方法适用于不经常变动而查找频繁的有序列表。
II. 思路分析:
二分查找的基本思想是:
(1)先确定一组顺序排列的数据存储到数组中,输入要查找的数据
(2)将数组元素的中值与查找的数据相比较,如果两者相等,则子函数返回相应的结果后终止;
(3)否则利用中间位置缩小数据查找的范围。如果中间位置的数组元素大于查找数值,则进一步查找中值之前的数组元素,否则进一步查找中值之后的数组元素。
(4)重复上述过程,直到在数组中找到相同的数字。
(5)若在数组中找不到这个数据,则显示查找不成功
III. 算法框架:
按照分治算法三步骤,将二分算法作如下介绍:
二分算法代码设计模式:
//arr[]表示要进行二分查找的顺序排列对象数组,low表示数组下标的最小值,high表示数组下表的最大值,key表示要查找的元素
int erfen(int arr[],int low,int high,int key){
(如果数组下标的最小值大于最大值
则返回结果为-1至主函数;//表明在数组中不存在要查找的元素
(确定数组的中间位置mid
(若查找的元素等于数组的中间元素,则进行相应的步骤
④ 若查找的元素大于数组(指定范围内)的中间元素
则将查找范围缩小至数组(指定范围内)中间元素右边;
⑤若查找的元素小于数组指定范围内的中间元素
则将查找范围缩小至数组(指定范围内)中间元素左边;
}
例题1:输入一个整数n,然后按升序输入个整数,将它们存入数组a中,再输入一个数x,然后在数组中查找x,如果找到,输出相应的最小下标,否则,输出“Not Found”.
输入两个整数,作为两个数组的长度,输入两个按升序排列好的数组,将两个已排序的数组合并后存放在另一个数组中,且合并后的数组也是有序排列(要求不能合并后再排序),再输出合并后的数组。
样例输入
4 5
1 2 3 4
5 6 7 8 9
【样例输出1 2 3 4 5 6 7 8 9
代码:
#includeiostream
using namespace std;
int main()
{
int m,n,i,j,k=0,a[100],b[100],c[200];
cinmn;
for(i=0;im;i++)
cina[i];
for(j=0;jn;j++)
cinb[j];
i=0;j=0;
while(imjn)//当数组a和数组b都没有完全赋值到数组c中时
{
if(a[i]b[j])//如果a数组里的元素比b数组的小
{
c[k]=a[i];//就把数组a的元素赋给数组c
i++;k++;//且将数组a和数组c的下标都往后移一位
}
else//要是数组b的元素比数组a的元素大时
{
c[k]=b[j];//就把数组b的元素赋值到数组c中
j++;k++;//且将数组b和数组c的下标往后移一位
}
}
if(i==m)//当数组a已经被完全赋值到数组c中
{
while(jn)//当数组b还没有完全赋值
{
c[k]=b[j];//此时,只需要把b数组中剩余的数全部赋值到数组c接下去的位置上
j++;k++;
}
}
else//当数组b已经被完全赋值到数组c中
{
while(im
您可能关注的文档
- (100分)2018年河北省公需科目《专业技术人员生态体验式职业道德》试题和答案二.doc
- [精品]商砼站原材料进场质量控制规程.doc
- “安全在我心中”小学主题班会课件.docx
- 2018届安徽省六校教育研究会高三第二次联考文综地理考试试题.doc
- 2018届高考数学(理)热点题型:概率和统计(含答案).doc
- 2018届高三模拟考试文科综合历史试题.doc
- 2018届高三数学文科二轮复习:专题检测(十四)--直线和圆.doc
- 2018届广东省理科数学模拟考试试卷一.docx
- 2018届高三英语模拟考考试试卷(1)答案.docx
- 2018届广州市普通高中毕业班综合测试(一)试题与答案(语文)-完整版.doc
最近下载
- DB13T 298.3-1997 结球甘蓝品种(系)区域试验调查项目及要求.pdf VIP
- 2025年新改版人教版七年级上册地理全册精编知识点 (背诵用).pdf
- 三菱FR-D740变频器使用手册(应用篇)-说明书.pdf
- 2025年国家开放大学《农村经济管理》形考作业三答案.docx VIP
- DB13T 298.3-1997 结球甘蓝品种(系)区域试验调查项目及要求.docx VIP
- DELTA台达ASDA-A2伺服驱动器使用手册.pdf
- 水工隧洞课件.pptx VIP
- 精益管理培训-拉动式生产方式.pdf VIP
- 部编版语文六年级上册第五单元【集体备课】.pptx VIP
- (完整版)华师版七年级下册数学知识点总结.pdf VIP
文档评论(0)