二分查找

101 阅读1分钟

基本框架

function binarySearch(arr,target){
	let begin = 0;
	let end = ###;
	while(###){
		let mid = ###;
		if(arr[mid]==target){ …… ;}
		else if(targe<tarr[mid]){ …… ;}
		else if(arr[mid]<target){ …… ;}
	}
	return ###;
}

我认为最好记的框架:

function binarySearch(arr,target){
	let begin = 0;
	let end = arr.length-1;//相当于搜索区间为[begin, end],这是一个闭区间
	while(begin<=end){  //begin>end是跳出条件
		let mid = Math.floor((begin+end)/2);
		if(arr[mid]==target){ 
			reutrn mid;
		}
		else if(target<tarr[mid]){
        	end = mid-1;//因为是闭区间,搜索范围变为[left, mid - 1]
        }
		else if(arr[mid]<target){ 
			begin = mid+1;//搜索范围变成[mid + 1, end]
		}
	}
	return -1;
}

另一个可以加以理解的框架

function binarySearch(arr,target){
	let begin = 0;
	let end = arr.length;//相当于搜索区间为[begin, end),这是一个闭开区间
	while(begin<end){  /这里begin不能等于end,所以只要begin<end就好
		let mid = Math.floor((begin+end)/2);
		if(arr[mid]==target){ 
			reutrn mid;
		}
		else if(target<tarr[mid]){
        	end = mid;//因为是闭开区间,搜索范围变为[left, mid - 1]
        }
		else if(arr[mid]<target){ 
			begin = mid+1;//搜索范围变成[mid + 1, end]
		}
	}
	return -1;
}

参考: 5分钟带你领略:写一个二分查找为什么让面试者挂的这么惨?