一、递归方法
function binarySearch(arr,item,start,end){
var length = arr.length,
start = start || 0,
end = end || length -1,
mid = Math.floor((start+end)/2);
if (arr[mid] === item)
{
return mid;
}else if (arr[mid] > item)
{
return binarySearch(arr,item,start,mid-1);
}else{
return binarySearch(arr,item,mid+1,end);
}
return -1;
}
var array = [5,4,3,2,1].reverse();
console.log(binarySearch(array,2));
二、循环方法
function binarySearch(arr,item){
var length = arr.length,
start = 0,
end = length -1,
mid;
while ( start <= end )
{
mid = Math.floor((start+end)/2);
if (arr[mid] === item)
{
return mid;
}else if (arr[mid] > item)
{
end = mid -1;
}else{
start = mid +1;
}
}
return false;
}
var array = [5,4,3,2,1].reverse();
console.log(binarySearch(array,2));
循环方法与递归方法的区别:设置中间值mid的方式不同
在循环中每次都会发生改变,所以要在while循环中确定mid值;
而在递归中开始直接固定就可以,每次递归时已经改变了mid值