二分查找

1. 二分查找概念

1.1 二分查找前提

表是按升序排列

1.2 二分查找过程

  1. 将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;
  2. 否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。
  3. 重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。

2. 代码实现

#include <stdio.h>
int binary_search(int key, int iArr[], int iArrLen) //自定义函数binary_search()
{
	int iLow,iHigh,iMid=0;
	int iSearchCount=0,iSucSeaConut=0;
	iLow=0;
	iHigh=iArrLen-1;
	while(iLow<iHigh)    			//査找范围不为0时执行循环体语句
	{
		iSearchCount++;    			//iSearchCount 记录査找次数
		iMid=(iLow+iHigh)>>1;    	//求中间位置 这里用的 位操作
		if(key<iArr[iMid])    		//key 小于中间值时
			iHigh=iMid;    			//确定左子表范围
		else if(key>iArr[iMid])     //key 大于中间值时
			iLow=iMid+1;    		//确定右子表范围
		else if(key==iArr[iMid])    //当key等于中间值时,证明查找成功
		{
			printf("查找成功! \n 查找 %d 次! iArr[%d]=%d",iSearchCount,iMid,key);    //输出査找次数及所査找元素在数组中的位置
			iSucSeaConut++;    		//iSearchCount 记录查找成功次数
			break;
		}
	}
	if(iSucSeaConut==0)    //判断是否查找失敗
		printf("查找失敗!");    //査找失敗输出no found
	return 0;
}

int main()
{
	int key = 6;
	int iArr[]={1,2,6,22,77,100,101};
	int iArrLen=sizeof(iArr)/sizeof(iArr[0]);
	printf("key = %d, iArrLen = %d \n",key, iArrLen);
	binary_search(key,iArr,iArrLen);    //调用自定义函数
	printf("\n");
	return 0;
}

结果:
key = 6, iArrLen = 7
查找成功!
查找 3 次! iArr[2]=6

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值