二分查找全攻略

一、基本的二分搜索 寻找一个数

//基本的二分搜索 寻找一个数
int binarySearch(int nums[],int target){
	int left=0;
	int right=length-1; //注意1 两端都是闭区间
	while(left<=right){ //注意2 <=
		int mid=(right-left)/2+left;//等同于(left+right)/2,防止溢出
		printf("first:[%d,%d,%d]\n",left,mid,right);
		if (nums[mid]==target) return mid;//找到了目标值时终止
		else if(nums[mid]<target) left=mid+1;//注意
		else if(nums[mid]>target) right=mid-1;//注意
		printf("  end:[%d, ,%d]\n\n",left,right);	
	}
	return -1;//注意
}

 问题思考:
1.为什么 while 循环的条件中是 <=,而不是 < ?
答:因为初始化 right 的赋值是 len-1,即最后一个元素的索引,而不是 length。这二者可能出现在不同功能的二分查找中,区别是:前者相当于两端都闭区间 [left, right],后者相当于左闭右开区间 [left, right),因为索引大小为 length 是越界的。
while(left <= right) 的终止条件是 left ==

Guess you like

Origin blog.csdn.net/lybc2019/article/details/120738013