二分查找是一种算法,其输入是一个有序的元素列表。如果要 查找的元素包含在列表中,二分查找返回其位置;否则返回null。
var list =[];
for (var i=0;i<1000000;i++){
list.push({ind:i,name:i+"name"})
}
console.log(list);
function findItem(list, item, oldLen = list.length, init = 0){
var len = parseInt( (oldLen - 1 - init) / 2 ) + init;
// console.log(len,item);
if(!list[len]) return null;
if(list[len].ind == item){
// console.log('--',list[len]);
return list[len];
}else if(list[len].ind > item){
return findItem(list,item,len-1,init);
}else{
return findItem(list,item,oldLen,len+1);
}}
findItem(list,0);
console.time("inite");
findItem(list,999999);
console.timeEnd("inite"); // inite: 0.05322265625ms
console.time("findIndex");
var itemInd = list.find( item => item.ind = 999999);
console.timeEnd("findIndex"); // findIndex: 0.031005859375ms
// 事实证明原生的已经很好用了 ^_^
一般而言,对于包含n个元素的列表,用二分查找最多需要log2n步,而简单查找最多需要n步。