二分查找法是一种算法,其输入是一个有序的元素列表,如果要查找的元素包含在列表中,二分查找返回其位置,否则返回null。
一般而言,对于包含n个元素的列表,用二分查找最多需要㏒₂n步。
/**
* @param {list}有序的数组列表
* @param {item}指定要查找的元素
* @return {number|null}
*/
binary_search (list, item) {
//low 和 high 用于跟踪要在其中查找的列表部分
let low = 0;
let high = list.length - 1;
while (low <= high) { //只要范围没有缩小到只包含一个元素,
let mid = Math.floor((low + high) / 2);//就检查中间的元素,
let guess = list[mid];
if (guess == item) { //找到了元素
return mid;
}
if (guess > item) { //猜的数字大了
high = mid - 1;
} else { //猜的数字小了
low = mid + 1
}
}
return null; //没有指定元素
}
let my_list = [1,3,5,7,9];
console.log(binary_search(my_list,3)); //打印 1
console.log(binary_search(my_list,-1))://打印null
网友评论