二分查找(binary search),也称折半搜索(half-interval search)

二分查找的对象必须是排列好的数组。

二分查找的最优时间复杂度为 $O(1)$,最坏时间复杂度为 $O(logn)$。

在二分查找中,每次迭代都会将查询区间减半,因而对于所有的n来说,时间复杂度是$O(logn)$。

二分查找算法的迭代实现:

int binary_search(int start, int end, int key) {
	int ret = -1; // 未搜索到数据返回-1下标
	int mid;
	while (start <= end){
		mid = start + ((end - start) >> 1); // 直接平均可能会溢出,所以用这个算法
		if (arr[mid] < key)
			start = mid + 1;
		else if (arr[mid] > key)
			end = mid - 1;
		else { // 最后检测相等是因为多数搜索情况不是大于就是小于
			ret = mid; 
			break;
		}
	} return ret; // 单一出口
}