码迷,mamicode.com
首页 > 编程语言 > 详细

二分查找之算法

时间:2017-08-13 15:13:14      阅读:147      评论:0      收藏:0      [点我收藏+]

标签:非递归   数组   key   算法   顺序存储   查找   复杂   ==   时间复杂度   

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

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、空间复杂度

二分查找之算法

标签:非递归   数组   key   算法   顺序存储   查找   复杂   ==   时间复杂度   

原文地址:http://www.cnblogs.com/camille666/p/js_binary_search_fn.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!