Javascript 算法——二分查找

136 阅读1分钟

二分查找是一种算法,其输入是一个有序的元素列表。如果要 查找的元素包含在列表中,二分查找返回其位置;否则返回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步。