二分查找之算法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二分查找之算法相关的知识,希望对你有一定的参考价值。

一、定义
二分查找又称为折半查找,仅适用于有序排列的顺序表,即线性表的顺序存储结构,具有随机存储特性。二分查找不适合链式存储结构。
二、算法思想
拿目标关键字与数组中间位置元素的值比较,若相等,返回该元素的存储位置;若不等,在缩小的范围中继续查找,如此反复,直到找到为止。
三、具体实现(数组为升序排列)

1、非递归

/**
 * arr:数组
 * key:关键字
 * mid:关键字的下标
 * low:数组第一个数的下标
 * high:数组最后一个数的下标
 */
function bsFdg(arr, key) {
  var low = 0,
      high = arr.length - 1;
  while(low <= high){
    var mid = parseInt((high + low) / 2);
    if(key == arr[mid]){
      return mid;
    }else if(key > arr[mid]){
      low = mid + 1;
    }else if(key < arr[mid]){
      high = mid -1;
    }
  }
  return -1;
}
console.log(bsFdg([3,6,9,16,18],16));

2、递归

function bsDg(arr, low, high, key) {
  if(low > high) return -1;
  var mid = parseInt((low + high)/2);
  if(key == arr[mid]) {
    return mid;
  } else if(key > arr[mid]) {
    return bsDg(arr, mid+1, high, key);
  } else if(key < arr[mid]) {
    return bsDg(arr, low, mid-1, key);
  }
}
console.log(bsDg([3,6,9,15,17],0,4,17));

 四、效率分析

1、时间复杂度

2、空间复杂度

以上是关于二分查找之算法的主要内容,如果未能解决你的问题,请参考以下文章

Python 算法之二分查找

44期盘点那些必问的数据结构算法题之二分查找算法

算法之二分查找PK线性查找

查找算法之“二分查找”

蓝桥杯软件学院:常见算法之二分查找

基础算法模板之二分