问题:A心里想一个1-1000之间的数,B来猜,可以问问题,A只能回答是或否。怎么猜才能问的问题次数最少?
思路:是1吗?是2吗?…是999吗? 平均要问500次 大于500吗?大于750吗?大于625吗? …每次缩小猜测范围到上次的一半
只需要 10次
二分查找函数
写一个函数BinarySeach,在包含size个元素的、从小到大排序的int数组a里查找元素p,如果找到,则返回元素下标,如果找不到,则返回-1。要求复杂度O(log(n))
下面附核心代码:
int BinarySearch(int a[],int size,int p)
{
int L = 0; //查找区间的左端点
int R = size - 1; <