美文网首页
1.二分法查找(用js学算法)

1.二分法查找(用js学算法)

作者: 简默丶XS | 来源:发表于2019-02-22 10:58 被阅读0次

二分法查找的必要条件:数据必须是一个有序的列表
概述:利用每次都先找到中间值然后排除一半数据的方法进行查找

js实现1
思路:获得数组左右两侧的下标left/right,将(left+right)/2获得mid下标,根据大小关系修改left,right值

  function findNum(nums, que) {
    let leftIndex = 0;
    let rightIndex = nums.length - 1;
    let ret = -1;//定义返回结果
    while (leftIndex !== rightIndex) {
      let mid = Math.round((leftIndex + rightIndex) / 2)
      if (nums[mid] === que) {
        ret = mid
        break;
      } else if (nums[mid] > que) {
        rightIndex = mid
      } else {
        leftIndex = mid
      }
    }
    return ret
  }

  let nums = [1, 3, 6, 8, 11, 22, 88] //目标数组
  const que = 6;//目标结果

  const result = findNum(nums, que)
  if (result !== -1) {
    console.log(`找到了:下标是${result}`)
  } else {
    console.log('可惜,没找到')
  }

js实现2【用的计数下标,思路繁琐】:
思路:创建一个变量queIndex保存结果下标数字,每次获得数组的长度除以2得到mid值,mid值比结果值小则queIndex加上mid值,一直找到结果为止

  let nums = [1, 3, 6, 8, 11, 22, 35, 73, 99, 101, 202, 305, 606, 1000, 10001, 20300] //目标数组
  const que = 20300;//目标结果
  let queIndex = 0;//跟踪目标结果下标
  let fin_n = 0;//查找次数

  while (nums.length !== 1) {
    fin_n++;
    const mid_index = Math.round(nums.length / 2)
    //找中间值
    const middle = nums[mid_index]
    //判断 比que大还是小,生成新的数组
    if (middle > que) {
      console.log('大了')
      nums = nums.slice(0, mid_index)
    } else if (middle < que) {
      console.log('小了')
      queIndex += mid_index
      nums = nums.slice(mid_index)
    } else {
      //找到了
      console.log(`找到了!:下标是:${queIndex + mid_index},总共查找了${fin_n}次`)
      break;
    }
  }
  if (nums.length === 1)
    console.log(`找到了!:下标是:${queIndex},总共查找了${fin_n}次`)

相关文章

  • 1.二分法查找(用js学算法)

    二分法查找的必要条件:数据必须是一个有序的列表概述:利用每次都先找到中间值然后排除一半数据的方法进行查找 js实现...

  • 查找算法

    三种查找算法:顺序查找,二分法查找(折半查找),分块查找,散列表

  • 刷前端面经笔记(九)

    1.JavaScript实现二分法查找? 二分法查找,也称折半查找,是一种在有序数组中查找特定元素的搜索算法。查找...

  • 算法图解1-2/11

    原书作者 Aditya Bhargava 1 算法简介 1.1 二分法查找 二分法查找,正是猜数字游戏的玩法:A...

  • 查找算法

    查找算法 顺序查找法 时间复杂度:O(n) 二分法查找 二分法查找适用于有顺序的序列 时间复杂度:O(n) 核心思...

  • 前端面试之算法二分法

    使用二分法的前提是,目标数组的元素必须是有序排列的,所以二分法属于有序查找算法 二分法又称为“折半查找”,从数组的...

  • 二分法查找

    二分法查找 : 目的 : 查找一个数组中是否含义某个元素 : 有返回数组中的位置 ,没有返回 -1 算法: 二分法...

  • 解析前端面试之二分查找算法

    二分法查找,也称为折半法,是一种在有序数组中查找特定元素的搜索算法。 二分法查找的思路如下: (1)首先,从数组的...

  • 算法:二分法查找(折半查找法)

    算法:二分法查找(折半查找法) 这是最经典的折半查找,而在面试的时候往往会对某些经典的数据结构和算法进行魔改,这道...

  • 二分法查找

    二分法查找 算法:二分法查找适用于数据量较大,但是数据需要先排好序 (1)确定该区间的中间位置k(2)将查找的值T...

网友评论

      本文标题:1.二分法查找(用js学算法)

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