算法入门-二分查找
二分查找法 - javascript
二分查找发有一个前提是,查找的数组必须是排好序的数组;
假设现在有需要在1~100的数组中查找x是否存在,最坏的结果是最多要查100次;如果数组有亿位,最坏则需要查亿位次;
二分查找则不同,假设列表有100位,最多只需要查7次,100000000位最多只需要27次;因为:100/2/2/2/2/2/2/2=floot (0.78125);
二分查找的速度为O(log n),该速度为对数时间
首先看动图(以查找1为条件):
综图所述很明显:
- 获取数组中间元素,作为与基点判断的条件
- 如果中间的元素大于基点,收缩height点,则height点=中间元素的位置+1;如果中间元素小于基点则收缩height点,则height点=中间元素位置+1;如果中间元素和基点相等,则返回元素;
代码解释:
function search() {
let minIndex = 0;
let maxIndex = arr.length - 1;
while (minIndex <= maxIndex) {
let middleIndex = Math.floor((maxIndex + minIndex) / 2);
if (arr[middleIndex] == target) {
return middleIndex;
} else if (target > arr[middleIndex]) {
minIndex = middleIndex + 1
} else if (target < arr[middleIndex]) {
maxIndex = middleIndex - 1
}
}
return -1
}```
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!