在线客服
扫描二维码
下载博学谷APP
扫描二维码
关注博学谷微信公众号
二分法检索变种实现代码怎么写?二分法中每次排除都可以排除掉一半的情况,这样寻找效率很高。之所以叫二分,因为每次排除都把所有的情况分成"可能"和"不可能"两种,然后抛弃所有"不可能"的情况。
二分法真的不简单,尤其是二分法的各个变种。最简单的二分法,就是从一个排好序的数组之查找一个key值。如下面的程序:

这个程序,相信只要是一个合格的程序员应该都会写。稍微注意一点, 每次移动left和right指针的时候,需要在mid的基础上+1或者-1, 防止出现死循环, 程序也就能够正确的运行。
但如果条件稍微变化一下, 你还会写吗?如,数组之中的数据可能可以重复,要求返回匹配的数据的最小(或最大)的下标;更近一步, 需要找出数组中第一个大于key的元素(也就是最小的大于key的元素的)下标,等等。这些,虽然只有一点点的变化,实现的时候确实要更加的细心。下面列出了这些二分检索变种的实现。
1、找出第一个与key相等的元素

2、找出最后一个与key相等的元素

3、查找第一个等于或者大于Key的元素

4、查找第一个大于key的元素

5、查找最后一个等于或者小于key的元素

6、查找最后一个小于key的元素
总结:
算法:当数据量很大适宜采用该方法。采用二分法查找时,数据需是排好序的。
基本思想:假设数据是按升序排序的,对于给定值key,从序列的中间位置k开始比较,
如果当前位置arr[k]值等于key,则查找成功;
若key小于当前位置值arr[k],则在数列的前半段中查找,arr[low,mid-1];
若key大于当前位置值arr[k],则在数列的后半段中继续查找arr[mid+1,high],
直到找到为止,时间复杂度:O(log(n))。
— 申请免费试学名额 —
在职想转行提升,担心学不会?根据个人情况规划学习路线,闯关式自适应学习模式保证学习效果
讲师一对一辅导,在线答疑解惑,指导就业!
相关推荐 更多
互联网研发岗位面试指南
因为疫情的影响,今年比往年的面试环境更加残酷。互联网研发岗位一向是各大企业公司需求的核心岗位,因此从这个角度来讲,研发岗位的求职者仍旧有着许多的机会。那么,大家应该如何准备面试把握好机会呢?本文将从考核重点、专业准备、项目介绍和远程面试注意事项几个重点,为大家呈现上一份详细的互联网研发岗位面试指南。
6055
2020-04-13 15:13:28
怎样选择培训课堂才能事半功倍
许多人在选择培训机构之前,都会遇到许多迷茫的问题。线上培训和线下培训的区别;不同的培训风格是否会产生不同的影响,侧重点是否会存在误差;许多培训的起点也不同,这些问题带来的困扰不在少数,那么该如何做出选择呢?
5236
2020-05-19 09:41:56
学习C语言的建议及心得体会
学习C语言是一个漫长的过程,我们来一起看看前辈对于C语言学习的心得和体会。掌握C语言的基础部分,包括基本的量、运算、结构与语法等。对于一些完成复杂功能的程序设计,其重点是对结构算法的设计,当然这是比较难的。
6771
2020-06-18 16:13:03
Linux入门基础命令速查表
本文将为大家介绍的基础命令,都是作为Linux入门学习必须要掌握的命令。在这里只是列出命令名称、示例以及简短说明,关于每条命令的详细说明,有兴趣的朋友可以在博学谷在线学习相关视频。下面一起来看看Linux入门基础命令速查表吧~
6001
2020-07-16 10:17:56
什么是网络编程?它是做什么的?
什么是网络编程?它是做什么的?简单解释一下,网络编程就是两台设备之间进行数据交换,最终到达通信的目的。要想深入的了解网络编程,我们必须弄清楚IP地址、端口号和网络协议这三者的概念,本文将会用最通俗易懂的例子,帮助大家理解网络编程的概念。
12877
2020-08-07 10:28:26
