01-复杂度3 二分查找

本文探讨了二分查找的基本思路,强调了在处理边界情况时选择小于号还是小于等于号的微妙之处。提供了作者初期学习和两个月后改进的两种C语言实现,并邀请读者在评论区交流讨论。
摘要由CSDN通过智能技术生成

二分查找函数

思路还是很简单的,就是 “左倾”还是“右倾”的问题。需要注意的细节就是 当要查找的值在 头和尾的情况。

解决办法就是在 while 语句的条件的中取 < 还是 <= 。

这个需要思考一哈,哈哈哈。

附上我的两个代码,第一个是我初学,第二个是我学了两个月后。

//二分法的本质就是不停缩小范围,因为是顺序的序列,于是靠找端点缩小范围成为可能 
int BinarySearch( List L, ElementType X)
{
	int Left, Right, Center;
	
	Left = 1; Right = L->Last; 
    Center = ( Left+Right)/2;
	// 1 2 3 4 5 6 7 8 9
	int flag = 0;
	
	while(Left < Right){
		
		if( X > L->Data[Center]){
			Left = Center + 1;
			Center = ( Left + Right)/2;
		}
		
		if( X < L->Data[Center]){
			Right = Center - 1;
			Center = (Left + Right)/2;
		}
		
		if( X == L->Data[Center] ){

			flag = 1;
			return Center;
			break;
		}
		
	}
	
	if( flag == 0)
		return NotFound;
	
} 

二个月后的代码,嘻嘻



Position BinarySearch( List L, ElementType X )
{
	int left = 1, right = L->Last, mid;
	
	while( left<=right ){ //等于在答案出现在尾部的时候用到 
		
		mid = (left + right)/2;
	
		if( L->Data[mid] == X ){
			return mid;
		}
		else if( L->Data[mid] > X ){
			right = mid - 1;
		}
		else{
			left = mid + 1;
		}
	}
	
	return NotFound;
	
 } 

有任何问题欢迎评论区讨论~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值