Javascript算法论道: 二分搜索(折半查找)
本文是Javascript算法论道系列的第一篇,讨论一种大家经常遇到的算法——二分搜索算法,
想必大家都玩过”猜数字”游戏:
一般十个人以上玩,主持人出数字,下方猜。主持人在手机或电脑上写下在1-100之间随便1个数字,不能让猜得人知道。其他的人就可以开始猜。猜中的有奖励:
1-100中随机产生一个数字,如:56
每个人开始猜猜数字,如:A说:30 主持人说:低了,30到100 ,B在从30到100中猜数字说:60,主持人在说:高了,30到60,………… Z说:56,主持人说:恭喜你,中奖了!!!!
这和二分搜索的思路是一致的:
二分搜索(折半查找)是一种经典的检索算法。该算法的基本思想如下:
(1) 选择数组的中间值。
(2) 如果选中值是待搜索值,那么算法执行完毕(值找到了)。
(3) 如果待搜索值比选中值要小,则返回步骤(1)并在选中值左边的子数组中寻找。
(4) 如果待搜索值比选中值要大,则返回步骤(1)并在选种值右边的子数组中寻找。
算法的实现思路如下:
function binarySearch(target, array) {
var low = 0,
high = array.length - 1,
mid, midElement;
while(low <= high){
mid = Math.floor((low + high) / 2);
midElement = array[mid];
if (target > midElement) {
low = mid + 1;
}else if (target < midElement){
high = mid - 1;
}else{
console.log('target index is : ' + mid);
return mid;
}
}
return -1;
}