二分法查找

本文介绍了二分查找算法的原理与应用,通过示例代码展示了如何在已排序的数组中使用二分查找法寻找目标值。算法的时间复杂度为O(log2n),适用于高效查找。在提供的示例中,分别在两个已排序数组arr和arr2上进行了查找操作。
摘要由CSDN通过智能技术生成
1.二分法查找
二分法查找算法:
  采用二分法查找时,数据需是排好序的。
  主要思想是:(设查找的数组区间为array[s, e])
    (1)确定该区间的中间位置m
    (2)将查找的值T与array[m]比较,若相等,查找成功返回此位置;否则确定新的查找区域,继续二分查找。
  区域确定如下:
  这里设array从小到大排列,
  array[m]>T由数组的有序性可知array[m,……,e]>T;
  故新的区间为array[s,……,m-1],
  类似上面查找区间array[s,……,m-1]。
  每一次查找与中间值比较,判断是否查找成功,不成功当前查找区间缩小一半,循环查找,即可。
  时间复杂度:O(log2n)。
* */
let arr = [0, 1, 2, 4, 5, 6, 7, 8];
let arr2 = [88, 77, 66, 55, 44, 33, 22, 11];

BinarySearch(arr, 2);
BinarySearch(arr2, 77);

function BinarySearch(arr, target) {
  let s = 0;
  let e = arr.length - 1;
  let m = Math.floor((s + e) / 2);
  let sortTag = arr[s] <= arr[e];//确定排序顺序

  while (s < e && arr[m] !== target) {
    if (arr[m] > target) {
      sortTag && (e = m - 1);
      !sortTag && (s = m + 1);
    } else {
      !sortTag && (e = m - 1);
      sortTag && (s = m + 1);
    }
    m = Math.floor((s + e) / 2);
  }

  if (arr[m] == target) {
    console.log('找到了,位置%s', m);
    return m;
  } else {
    console.log('没找到');
    return -1;
  }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值