说一下二分查找

今天跟大家分享一个比较简单且比较实用的搜索算法 – 折半查找

二分查找也叫折半查找,是我们在有序(注意: 是有序)数组中查找元素的高效算法。

很多大家熟悉的地方也使用了二分查找这种方式。比如:git bisect

好了,闲话不说,我们开始今天的分享。

1. 二分查找

解释:什么叫二分查找呢?顾名思义,就是将我们需要查找的数组不断的切分两份,直到找到要查找的元素。

这里要注意一点,一定要是有个有序的数组

栗子🌰:

const arr = [ 2, 3, 4, 5, 6, 7, 12, 34, 42, 45, 52, 67, 68, 84, 86 ];

function binarySearch (arr, value) {
  if (arr.length <= 0) {
    return -1
  }
  let start = 0
  let end = arr.length - 1
  while(start <= end) {
    // 不停的取中间值
    let mid = Math.floor((start + end) / 2)
    // 找到元素后,返回索引
    if (value === arr[mid]) {
      return mid
    }else if (value < arr[mid]) {
      // 当前值 大于 要查找的值
      end = mid - 1
    } else if (value > arr[mid]) {
      // 当前值 小于 要查找的值
      start = mid + 1
    }
  }
  // 找不到,返回-1
  return -1
}

console.log(binarySearch(arr, 67));

说明:

  1. 这里我们认为传入的数组都是有序的。
  2. 如果数组的长度为 0,则表明没有需要查找的元素,返回 -1
  3. 从数组开始位置start,查找到数组结束位置 end
  4. 定义一个中间值 mid,判断中间值与目标值的对比。
    1. 目标值比中间值大,说明要查找的元素位于中间值右侧。若目标值为 67 ,第一次中间值为 34,目标值位于中间值右侧。查找右侧数组
    2. 目标值比中间值小,说明要查找的元素位于中间值左侧。若目标值为 4 ,第一次中间值为 34,目标值位于中间值左侧。查找左侧数组
  5. 当查找完数组之后依然没有查找到目标值,则返回 -1

二分查找是一种比较简单的算法,但是依然有很多人并不能写出来正确的解答。

这里还是要提醒大家一点,千万别死记硬背代码,一定要理解思路,理解了思路之后才会有层出不穷的解决方式,而不是固守一种方法。

好了,今天的分享就到这里了。我们下次再见

Bye~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值