二分查找

  • 二分查找的关键在于数组 是需要为 有序的数组
 <script>
        var arr = [1, 3, 5, 7, 9, 11, 14, 15, 17, 19, 20];
        function text(arr, key) {
            var low = 0,
                high = arr.length - 1;

            while (low <= high) {  //循环到什么时候结束呢? 我们循环的过程中, low 和 higt 两个值会逐渐逼近,
                        //等尾部的数大于了头部,说明我们没找到,就停止,返回-1 (相等的情况下,说明只剩最后一个值了,还需要判断)

                var mid = parseInt((high + low) / 2);
                if (arr[mid] == key) { //判断 中间值是否等于 我们要查的那个数,如果等于,那就找到了,直接返回;
                    return mid;

                } else if (key < arr[mid]) {//判断 key 是否 < 中间值, 如果小于  说明我们要找的数,在左边那块
                    high = mid - 1;    // 在左边那块,那么我们就把右边那块 砍掉, 直接让他 等于中间值, 这个数组直接就成了,
                                        // 1 3 5 7 9  那么 我们在刚开始就判断了中间值 所以让他 - 1  数组就成了 1 3 5 7

                } else if (key > arr[mid]) { //同上的原理。
                    low = mid + 1;
                }
            };
            return -1; //没找到,返回-1;
        }
      text(arr, 7);
    </script>