看书看到了关于二分搜索的内容,自己尝试着用javascript写了一段二分搜索的算法,
代码如下:
/*二分搜索 index刚开始默认为0*/
function getNumIndexOfArray(array, value, index) {
if (array.length > 0 && array[array.length - 1] >= value) {
if (array.length > 1) {
var idx = parseInt(array.length / 2);
if (array[idx] > value) {
//表明搜索的数字在前一半里面
var newarray = array.splice(0, idx);
return getNumIndexOfArray(newarray, value, index);
} else if (array[idx] < value) {
//表明搜索的数字在后一半里面
var newarray = array.splice(idx,array.length - idx);
return getNumIndexOfArray(newarray, value, idx + index);
} else {
return idx + index;
}
} else {
if (array[0] == value) {
return index;
}
}
}
return -1; //代表输入的有误
}
自己用整数测试了一下没问题
var lst = new Array(155);
function setVal1() {
for (i = 0; i < lst.length; i++) {
lst[i] = i * 2 + 1;
}
}
function setVal2() {
for (i = 0; i < lst.length; i++) {
lst[i] = i + 1;
}
}
测试如下:
> setVal1()
undefined
> getNumIndexOfArray(lst,66,0)
-1
> setVal1()
undefined
> getNumIndexOfArray(lst,111,0)
55
> setVal2()
undefined
> getNumIndexOfArray(lst,66,0)
65
二分搜索在实际应用中还是挺重要的,程序不用去遍历匹配,而只用log2 n 次就能计算出结果