二分查找,就该这样学~~

大家好,我是小王!相信很多人在做题的过程中会遇见在某有序数组找到一个数,并把它的下角标打印出来。对于小白来说,确实有点棘手,那今天我来用我的理解教教友友们。

*首先我们要知道一种叫“二分法查找”的算法,这样就可以轻松的找到自己想要的结果。二分法查找适用于数据量较大时,但是数据需要先排好顺序。主要思想是:(设查找的数组区间为array[front, end],下面为大家举一个例子:

 

在有序数组arr[]={3,12,24,36,55,68,75,88}中找出24的下标。

(1)

(2)将front(左下标),mid(中间值),end(右下标)分别标记出来,又mid=(front+end)/2

(3)将中间值arr[mid]与我们要找的值24作比较

 

(4)依次重复上面步骤,得到最终结果

                 

下面是代码的运行结果


#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
	int arr[] = {2,12,24,36,55,68,75,88};
	int front = 0;//定义左下标;
	int sz = sizeof(arr) / sizeof(arr[0]);//求出下标个数;
	int end = sz - 1;//定义右下标个数;
	int k = 24;

	
	while (front <= end)//避免交叉范围
	{
		int mid = (front + end) / 2;
		if (arr[mid] > k)
		{
			end = end - 1;
		}
		else if (arr[mid] < k)
		{
			front = front + 1;
		}
		else
		{
			printf("找到了: % d\n", mid);
		}
	}
	if (front > end)
	{
		printf("找不到:%d\n");
	}
	return 0;
}

最后,如股票这篇文章对您有什么帮助的话,给个三连吧!

有不足的地方请多多指教!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值