算法入门-二分查找

二分查找法 - javascript

二分查找发有一个前提是,查找的数组必须是排好序的数组;

假设现在有需要在1~100的数组中查找x是否存在,最坏的结果是最多要查100次;如果数组有亿位,最坏则需要查亿位次;

二分查找则不同,假设列表有100位,最多只需要查7次,100000000位最多只需要27次;因为:
100/2/2/2/2/2/2/2=floot (0.78125);二分查找的速度为O(log n),该速度为对数时间

首先看动图(以查找1为条件):
在这里插入图片描述
综图所述很明显:

  1. 获取数组中间元素,作为与基点判断的条件
  2. 如果中间的元素大于基点,收缩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 协议 ,转载请注明出处!