【C/C++】折半查找(二分查找)

本文详细介绍了二分查找算法,适用于有序数组的快速搜索,并提供了C语言实现代码。文章还讨论了算法的优点、局限性及优化方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、二分查找

在C和C++里,二分查找是针对有序数组所用的一种快速查找元素的方法。

二、二分查找的条件以及优缺点

条件:针对有序数组(元素从小到大或从大到小)
优点:查询速度较快,时间复杂度为O(n)
缺点:有硬性条件的限制,而且即使查到后,插入与删除困难。

三、图片详解

 

 

四、二分查找C语言代码块(封装后)

封装函数解释:

函数原型:binary_research(int arr[],int left , int right , int element)
函数功能:利用二分法查找数组元素
返回值    :若找到元素,返回元素数组下标;否则,返回-1

代码块:

int binary_research(int arr[],int left,int right,int element)
{
	while(left<=right)
	{	
		int mid = (left+right)/2;
		if(arr[mid]>element)
		{
			right = mid - 1;
		}
		else if(arr[mid]<element)
		{
			left = mid + 1;
		}
		else 
		{
			return mid;
		}
	}
	return -1;
}

主函数代码块:

int main()
{	
	int array[] = {1,2,3,4,5,6,7,8,9};
	int right = <a target=_blank href="http://blog.csdn.net/qq_31828515/article/details/51646693">sizeof(array)/sizeof(array[0]) - 1</a>;//利用<a target=_blank href="http://blog.csdn.net/qq_31828515/article/details/51646693">sizeof</a>求数组长度,-1后为右下标
	int left = 0;//定义右下标并初始化为0
	int element = 0;//定义查找的元素并初始化为0
	printf("请输入要查找的元素>");
	scanf("%d",&element);
	int location = binary_research(array,left,right,element);
	if(location>=0)
		printf("The element's location is %d\n",location);
	else
		printf("Don't exit this element.\n");
	return 0;
} 

五、小结

二分查找对有序数组来说查询速度快。
 
优化:
可以用
int mid = left - (left - right)/2; //防止越界

int mid = left&right+(left^right)>>1;//进行计算机最喜欢的位运算,效率略高

来代替  求两个数的平均值的操作
---------------->>> sizeof打印数组元素

----------------------->>>深入预处理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值