一、二分查找的步骤:
1、定义一个有序数组
2、定义左边界L、右边界R、确定搜索范围、循环执行二分查找
3、获取中间索引 M = Floor((L + R) / 2) 向下取整(JavaScript里是小数)
4、中间索引的值A[M]与待搜索的值T进行比较
4.1 A[M] = T,表示找到返回中间索引
4.2 A[M] > T,中间右侧的其它元素都大于T,无需比较,中间索引左边查找,M - 1设置为右边界、重新查找
4.3 A[M] < T,中间左侧的其它元素都小于T,无需比较,中间索引右边查找,M + 1设置为左边界、重新查找
5、当L > R时,表示没找到,返回-1结束循环
二、代码实现
三、经典大厂面试题
1、有一个有序表为1、5、8、11、19、22、31、35、40、45、48、49、50,当二分查找值为48的结点时,查找成功需要比较的次数: 4次 (京东实习生面试题)
思路:有序表集合长度为奇数二分取中间,为偶数二分取中间靠左
先取31,再取45,再取49,最后取48.
2、使用二分法在序列1,4,6,7,15,33,39,50,64,78,75,81,89,96中查找元素81时需要经过(4)次比较。 (美团点评校招) 78和75元素应该对调下。
3、在已经的128个数组中二分查找一个数,需要比较的次数最多不超过多少次 (7)
(北京易道博识社招) 2的7次方是128
2的几次方 = 128 或者 128 /2/2 ... 直到1
问题转化为log 以2为底 128,如果手边有计算器,使用科学计算器来计算。
用log 10 为底 128 / log 10 为底 2
是整数,则该整数即为最终结果
是小数,则舍去小数部分,整数加一为最终结果



