二分查找算法(折半查找算法)

在一串有序字符中,我们需要找到一个字符,可以利用字符数组中下标计算寻找,在数组字符中,下标是以0开始的,字符是以/0结束。

例如

1,2,3,4,5,6中我们需要找到数字2

下标对应 0,1,2,3,4,5

用左下标加上右下标然后除以2,这里左下标是0,右下标是5,计算结果是不看余的,所以下标结果是2,对应数字3,是大于我们要找的数字2(下标1),这时可以改变右下标为2-1,因为是大于我们数字的就不用下标2(这里不会出现小于等于或者大于等于,因为一旦等于,就代表已经找到了),我们改变下标2为1之后,再次进行循环计算,0+1除二等于0.5,不看余为0,这时下标0为1,是比我们要找的数字小的,现在可以改变左下标为0+1,这个时候左下标等于右下标都为1,计算之后还是1,这是若是等于我们需要找的数字,就直接可以输出结果了

在程序中,定义左下标变量可以直接等于0,因为下标是以0开始的

右下标可以是数组个数-1

计算数组个数sizeof(arr)/sizeof(arr[0])

其中“sizeof(arr)“计算了整个数组arr占据了多少内存(字节为单位),”sizeof(arr[0])“计算了数组中第一个元素所占多少字节,两者相除就是数组个数

举例(头文件自己添加)

int main()//二分查找算法,折中查找算法,在有序数组中找到需要的值
{
	int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
	int a = sizeof(arr) / sizeof(arr[0]);//计算数组个数
	int d = 0;//左下标
	int f = a - 1;//右下标
	int b = 8;
	while (d<=f)//循环判断条件
	{
		int c = (d + f) / 2;//取中算法
		if (arr[c] > b)//数组值比需要找到的数大
		{
			f = c - 1;//改变右下标
		}
		else if (arr[c] < b)//数组值比需要找到的数小
		{
			d = c + 1;//改变右下标
		}
		else//这种是b==arr[c]
		{
			printf("zhaodaole %d\n", c);
			break;//找到结束程序
		};

	}
	if (d > f)
	{
		printf("找不到,算法出现问题,左右下标或数组问题");
	}
	return 0;
}

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值