二分法

二分法

对于一个有序数列的查找问题;强调数列有序

为什么需要二分法

以往我们在一个数列里查找一个值我们会用for循环查找,这样十分有效,但是虽然说现在计算机性能能强大 但是资源也不能无故浪费,或者说在比赛中写题时可能会出现 **time limited error
for循环为O(n) 而 二分法为O ( \log_2 10)

思想

类似于猜数
假设在1~100 中 猜60
第一次 50 反馈 小了;每一次都取中间值
第二次 75 反馈 大了;
第三次 62 反馈 大了;
第四次 56 反馈 小了;
第五次 59 反馈 小了;
第六次 60 反馈 正好; 输出60;

#include <stdio.h>
 int erfen (int d[], int target, int left, int right)
{//第二个参数是要找的数,返回下标
	int mid;
	while (left <= right)
	{
		mid = (left + right) / 2;// 也可写成 m = left + ( right - left) / 2;
		if (target < d[mid])
			right = mid - 1;
		else if (target > d[mid])
			left = mid + 1;
		else{
            break;
		}
	}
	return mid;
}



int  main(void)
{

	int b[] = { 1, 2, 3, 4,  5, 6, 7, 8, 9};
	int c = erfen(b, 4, 1, 9);
	printf("%d\n", b[mid]);
	return 0;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值