二分查找
搜索过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜索过程结束;如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且跟开始一样从中间元素开始比较。如果在某一步骤数组为空,则代表找不到。这种搜索算法每一次比较都使搜索范围缩小一半
讲人话就是:每次都取中间元素,直到左右指针互相碰撞时为止
应用
一般用于一组有序元素的查找,例如一组学生中找到分数等于85的那个同学
binarySearch 方法
| 1 | /** | 
先写测试用例
写一个跑测试用例的方法,接收一组测试用例和执行函数,当不匹配时打印
| 1 | const runTests = (tests, fn) => { | 
Tests要怎么写?一个个写显然太麻烦可以这样写
| 1 | const Tests = [ | 
当然你也可以加些间隔
| 1 | const Tests = [ | 
直接抽离成函数
| 1 | const createTests = (len, gap, other) => new Array(len + other).fill(0) | 
开始编码
定义左右指针i,j 当满足 while 时证明已经找到/没法再找了
| 1 | function binarySearch(list, target){ | 
接着写循环里面内容
- 计算出中间元素下标
- 判断中间元素缩短查找范围
| 1 | while(l < r){ | 
这个写法是判断右边元素往左边靠拢的写法,当遇到重复的有序数组,例如 [0,1,1,1,1,2]
会找到第一个 1 的位置,如果要找到最后一个 1 要怎么写?
反过来写就行拉
| 1 | /** | 
