<!DOCTYPE html>
<html>
<head>
<title>二分查找法实现</title>
</head>
<body>
<script type="text/javascript">
var log = console.log.bind(console)
function binareSearch(arr,v){
if(arr == null || arr.length <= 0){
return -1;
}
var low = 0,high = arr.length-1;
var mid;
while(low <= high)//此处注意是小于等于,不能写小于(小于在特殊情况下会出现错误)
{
mid = low + ((high-low)>>1);//此处使用的是右移符号,而没有使用/2,因为在js当中整数除以整数会得到小数,小于传进数组当做索引,程序不会报错,只会返回undefined,执行下面的比较时,小于和大于都不满足,会直接返回mid
//mid = (low+hight)>>1//这种写法虽然数学上是一样的,但在程序中是不一样的,因为low+hight可能会溢出,因此使用上面的写法更为稳妥
if(arr[mid] < v){
low = mid + 1;
}else if(arr[mid] > v){
high = mid -1;
}else{
return mid;
}
}
return -1;
}
//测试
var arr = [];
for(var i = 0;i<1000;i++){
arr[i] = i;
}
log("25 ->"+binareSearch(arr,25));
log("-100 ->"+binareSearch(arr,-100));
log("1000 ->"+binareSearch(arr,1000));
log("28 ->"+binareSearch(arr,28));
log("500 ->"+binareSearch(arr,500));
log("50 ->"+binareSearch(arr,50));
</script>
</body>
</html>