二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列。
# 要求:
1.必须为线性表;
2.有序;
代码示例:
/**
* 假定数组为升序排列
* array: 查找范围
* target: 目标值
*/
function binarySearch (array, target) {
if (!array || array.length === 0) {
return -1
}
let left = 0; // 数据左区间边界
let right = array.length - 1; // 查找右区间边界
while (left <= right) {
const middle = Math.floor((right + left) / 2); // 中间位置
if (array[middle] === target) {
return middle
} else if (array[middle] > target) { // 将左区间边界缩小到middle + 1位置
left = middle + 1;
} else { // 将右区间边界缩小到 middle - 1位置
right = middle - 1;
}
}
return -1 // 未找到匹配值,则返回-1
}
leetcode问题练习: Search Insert Position