二分查找算法详解

本文介绍了二分查找算法,一种在有序数组中快速查找数据的高效方法。通过举例说明,阐述了如何通过不断将搜索范围折半来缩小查找范围,最终找到目标数字。示例代码展示了如何在JavaScript中实现二分查找,并分析了其查找效率,最多只需几次猜测即可找到目标值,无论列表大小。
摘要由CSDN通过智能技术生成

什么是二分查找?

其实就是能在一组经过排序的数组中快速查找数据

什么叫快速呢?如果用最笨的方法查找字典里面的一个字你会一个一个对比还是直接从中间开始查找呢,很明显从中间差汇总啊跟块,二分查找又叫折半查找,

接下来我们开始比较在1~100中查找一个数字,

更佳的查找方式

直接从50开始查找,如果小了,但排除了一半的数字!至此,你知道1~50都小了。
接下来,你猜75大了, 那余下的数字又排除了一半!使用二分查找时,你猜测的是中间的数字,从而每次都将余下的数字排除一半。接下来,你猜63( 50和75中间的数字)......
这就是二分查找.不管我心里想的是哪个数字,你在7次之内都能猜到

需求思路有了,那我们就开始小心翼翼的写代码吧.

//  接受实参传递过来的数组和要查找的数字
function binary_search(arr, key) {
            var low = 0,
                high = arr.length - 1;
            //查找方向
            while(low <= high){
                // 折半  parseInt转换为整数
                // 13+0/2
                var mid = parseInt((high + low) / 2);
                if(key == arr[mid]){
                    return  mid;
                }else if(key > arr[mid]){
                    low = mid + 1; 
                }else if(key < arr[mid]){
                    high = mid -1;
                }
            }
            return -1;
        };
        var arr = [1,2,3,4,5,6,7,8,9,10,11,56,57,60];
        console.log(arr.length);
        var result = binary_search(arr,11);
        alert(result); // 返回索引值

1.比较是否与key(你需要查找的数字)相等

2.如果不相等的话会继续判断是大了还是小了。如果key的值比猜到的值大那么,就会执行
  low = mid + 1;


执行完后这时low就变为7,high不变,这时就判断数组索引号07(low)到13(high)的数字
3.一次反复运算最后key == arr[mid]成立的时候就返回值,最后弹窗输出需要查找的数的索引号。

总结:如果列表包含100个元素,最多要猜7次;如果列表包含40亿个数字,最多需猜32次。厉害吧。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天涯各一方&

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值