问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

二分查找法的具体算法

发布网友 发布时间:2022-04-29 03:44

我来回答

1个回答

热心网友 时间:2022-04-14 07:14

折半查找法也称为二分查找法,它充分利用了元素间的次序关系,采用分治策略,可在最坏的情况下用O(log n)完成搜索任务。它的基本思想是,将n个元素分成个数大致相同的两半,取a[n/2]与欲查找的x作比较,如果x=a[n/2]则找到x,算法终止。如果x<a[n/2],则我们只要在数组a的左半部继续搜索x(这里假设数组元素呈升序排列)。如果x>a[n/2],则我们只要在数组a的右半部继续搜索x。二分搜索法的应用极其广泛,而且它的思想易于理解,但是要写一个正确的二分搜索算法也不是一件简单的事。第一个二分搜索算法早在1946年就出现了,但是第一个完全正确的二分搜索算法直到1962年才出现。Bentley在他的著作《Writing Correct Programs》中写道,90%的计算机专家不能在2小时内写出完全正确的二分搜索算法。问题的关键在于准确地制定各次查找范围的边界以及终止条件的确定,正确地归纳奇偶数的各种情况,其实整理后可以发现它的具体算法是很直观的,我们可用C++描述如下:

template<class Type>

int BinarySearch(Type a[],const Type& x,int n)

{

int left=0;

int right=n-1;

while(left<=right){

int middle=(left+right)/2;

if (x==a[middle]) return middle;

if (x>a[middle]) left=middle+1;

else right=middle-1;

}

return -1;

}

模板函数BinarySearch在a[0]<=a[1]<=...<=a[n-1]共n个升序排列的元素中搜索x,找到x时返回其在数组中的位置,否则返回-1。容易看出,每执行一次while循环,待搜索数组的大小减少一半,因此整个算法在最坏情况下的时间复杂度为O(log n)。在数据量很大的时候,它的线性查找在时间复杂度上的优劣一目了然。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
电脑docx怎么转换成word文档电脑上docx格式文件转换方法 电脑白屏是怎么回事啊。??? 电脑开机花屏渐渐地白屏了显示器突然白屏花屏的原因及解决方法_百度知 ... iphone录屏失败因为5823什么意思_iphone录屏失败提示5823代表什么意思... 软考中级:信息安全工程师 求大神解答打印机如何设置默认双面打印 如何更改打印机的打印格式? 经期同房月经没了会怀孕吗 iphone8p轻触解锁设置 宝沃bx5300公里多少油钱 成都市崇州的街子古镇为什么被称为“最低调”的古镇? 在一个有序数列中查找,二分查找是最优算法吗 钉钉退出家庭群会怎样 志高空调水机6匹的安装时没用边通行不行? 志高空调电机在一年内坏了,需要主家出钱吗? 志高空调内电机怎么换 3dmax右边工具栏修改器栏下边的一些快捷键怎么设置 3dmax自定义快速访问工具栏的颜色怎么设置?我的怎么不清晰? 松茸长什么样 QQ游戏打不开,显示“没找到VHELP.DLL,因此应用程序未能启动&quot; QQ游戏打不开,显示“没找到VHELP.DLL,因此应用程序未能启动&quot; 请问3DMAX主工具栏中的Keyboard Shortcut Override Toggle(快捷键覆盖开关)按钮在哪里 找了半天没找到 QQ游戏自动上传 QQ游戏自动上传 请问一下我按Alt+Tab切换窗口时,出现的一个叫skintooltip的程序是什么意思? 请问一下我按Alt+Tab切换窗口时,出现的一个叫skintooltip的程序是什么意思? qq游戏老提示调试或关闭是怎么回事 qq游戏老提示调试或关闭是怎么回事 gtx显卡性能排名情况是怎样的 怎样可以让QQ游戏大厅不自动升级? 请您删除C:&#92;Program Files&#92;Tencent&#92;QQGAME路径下的QQGameDL.exe文件并 成都的龙潭水乡古镇是人工复古建造的吗? 二分查找一个具有n个元素的有序表,其时间复杂度为:(求解析) 电脑硬盘出现了坏道,有三百多个。硬盘还能用么?能修复吗? 成都琴台路的由来 这么多硬盘坏道。怎么把这些屏蔽掉。。有坏道系统好慢。。说详细点。 如何清除硬盘的坏道,详细的。 数据结构:求算法的时间与空间复杂度 O(n)是什么 C语言,数据结构中 算法的时间复杂度 oppoa5卸载了录屏怎么下回来 中国的圣诞节是几月几号啊 怎么用ping命令测试网速? 每年以12月25日是圣诞节,相当于我们中国的什么节 如何用Ping命令查看自己的网速是多少 win7怎么用ping命令测试网速 请问一下,oppoa5手机有没有自带的录屏功能 用PING命令怎么算网速? 圣诞节到底是几号? 如何使用ping命令检测网速和网络连通状态 谁知道中国的圣诞节是几月几号?(孔子)