JS 二分查找

本文详细解析了二分查找算法的实现过程,包括算法的基本前提、步骤和两种实现方法,适用于有序数组中快速查找特定元素。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前提:数组必须是有序的,而且是自然顺序

var arr = [1, 2, 3, 4, 5, 6, 7];

1、首先获取开始下标;

     startIndex=0;

2、获取结束下标;

    endIndex=arr.length-1//---->6;

3、获取中间下标;

    midIndex=Math.floor((startIndex+endIndex)/2);

4、要查找的元素和中间下标对应的元素做对比:

  (1)要查找的元素=中间下标对应的元素

           中间的下标就是要查找元素的下标

   (2)要查找的元素>中间下标对应的元素

          那么开始下标的位置会发生改变:startIndex=midIndex+1;

   (3)要查找的元素<中间下标对应的元素

          那么结束下标的位置会发上改变:endIndex=midIndex-1;

方法一:

  var arr = [1, 2, 3, 4, 5, 6, 7];

  function getIndex(arr, ele) {
     //1.获取开始下标
     var startIndex = 0;
     //2.获取最终下标
     var endIndex = arr.length - 1;
     //循环的条件 开始下标 <= 结束下标
     while (startIndex <= endIndex) {
         //3.获取中间下标
         var midIndex = Math.floor((startIndex + endIndex) / 2);
     //将要查找元素与中间下标对应元素的值做对比
     if (ele > arr[midIndex]) {
           startIndex = midIndex + 1;
     } else if (ele < arr[midIndex]) {
           endIndex = midIndex - 1;
     } else {
     return midIndex;
  }


     }

     return -1;
     }

方法二(在原型上):

    var arr = [1, 2, 3, 4, 5, 6, 7];
    Array.prototype.getIndex = function (ele) {
        //1.获取开始下标
        var startIndex = 0;
        //2.获取最终下标
        var endIndex = this.length - 1;
        //循环的条件 开始下标 <= 结束下标
        while (startIndex <= endIndex) {
            //3.获取中间下标
            var midIndex = Math.floor((startIndex + endIndex) / 2);
            //将要查找元素与中间下标对应元素的值做对比
            if (ele > this[midIndex]) {
                startIndex = midIndex + 1;
            } else if (ele < this[midIndex]) {
                endIndex = midIndex - 1;
            } else {
                return midIndex;
            }
        }
        return -1;
    };
    console.log(arr.getIndex(6));

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值