标签:非递归 数组 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