二分法原理及代码实现

算法习题 专栏收录该内容
4 篇文章 0 订阅

如果这篇文章对你有所帮助或者给了你灵感,欢迎给我点个小红心,如果没有,也可以点个赞支持一下,谢谢大家!!!

二分法

基本思想:

假设数据是按升序排序的,对于给定值key,从序列的中间位置 k 开始比较,
如果当前位置arr[k]值等于key,则查找成功;
若key小于当前位置值arr[k],则在数列的前半段中查找,arr[low,mid-1];
若key大于当前位置值arr[k],则在数列的后半段中继续查找arr[mid+1,high]。

时间复杂度:

1.最坏情况查找最后一个元素(或者第一个元素)Master定理T(n)=T(n/2)+O(1)所以T(n)=O(log2n)
2.最好情况查找中间元素O(1)查找的元素即为中间元素(奇数长度数列的正中间,偶数长度数列的中间靠左的元素)

下面给出具体代码:

#include<stdio.h>
#include<string>
int main()
{
	int a[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
	int x;
	printf("请输入你要查找的数字:\n");
	scanf("%d", &x);
	int right = sizeof(a) / sizeof(a[0]) - 1;
	int left = 0;
	while (left <= right){
		int mid = (left + right) / 2;
		if (x > a[mid]){
			left = mid + 1;
		}
		else if (x < a[mid]){
			right = mid - 1;
		}
		else{
			printf("找到了,下标是:%d\n", mid);
			break;
		}
	}
	if (left>right)
		printf("找不到\n");

}

下图为运行结果:
在这里插入图片描述
都看到这了,就点个赞支持一下呗!

  • 6
    点赞
  • 5
    评论
  • 5
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

打赏
文章很值,打赏犒劳作者一下
相关推荐
©️2020 CSDN 皮肤主题: 游动-白 设计师:白松林 返回首页

打赏

小柒七七七

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值