美文网首页
说一下二分查找

说一下二分查找

作者: yancy_1012 | 来源:发表于2020-10-13 21:10 被阅读0次

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

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

很多大家熟悉的地方也使用了二分查找这种方式。比如: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~

相关文章

  • SearchInRotatedAry

    其实这个问题,是基于二分查找(BinarySearch)来解决的。所以这里需要先理解一下二分查找。 1. 二分查找...

  • 数据结构与算法系列——二分查找

    二分查找算法的简单介绍 今天我们来学习一下二分查找算法,也叫做折半查找算法。使用二分查找算法的前提是数据需要是有序...

  • 说一下二分查找

    今天跟大家分享一个比较简单且比较实用的搜索算法 -- 折半查找 二分查找也叫折半查找,是我们在有序(注意: 是有序...

  • python二分查找算法

    文章概述 二分查找法介绍 简单查找与二分查找对比 二分查找  二分查找算法主要思想:在有序列表中查找指定元素,先从...

  • 数据结构和算法--二分查找

    二分查找 二分查找的思想 二分查找(Binary Search)算法,也叫折半查找算法。 二分查找针对的是一个有序...

  • 算法 -- 二分查找

    前言 重要的事情说三遍,大厂面试必考,无论是前端还是移动还是后端,二分查找没有不考的!!! 二分查找思想 二分查找...

  • 二分查找

    二分查找是最基本的算法,复习了一下发现还有很多根本没有考虑的情况,特别记录一下1:最基本的二分查找 2.1 查找第...

  • 二分查找

    [TOC] 二分查找的基础模板 二分查找靠左的Index基础模板 二分查找靠右的Index基础模板 二分查找插入t...

  • 二分查找法

    二分查找法 二分查找法(递归)

  • 二分查找(递归、非递归)

    二分查找(递归) 二分查找(非递归)

网友评论

      本文标题:说一下二分查找

      本文链接:https://www.haomeiwen.com/subject/aksbpktx.html