【C语言学习】二分法查找有序数组中的数

二分查找的基本原理
二分查找的基本逻辑就是每次找区间的中间数,然后与要查找的数进行比较,不断的缩小区间,最后区间中只剩一个数,即为要查找的数。如果不是,则没有该数。
二分查找只适用于有序数组

以数组中的数从左至右按从小到大依次排列为例
最左端为a[0],最右端为a[len-1],中间数为(left+right)/2,中间数取整数时取大的或小的皆可,此处取小的那个(例如13/2,可取6或7,此处取6)
在这里插入图片描述
代码

#include<stdio.h>
int search(int k,int a[], int len)
{
	int left = 0;
	int right = len-1;
	int ret = -1;//当下标为-1时查找失败 
	while(left <= right)//当左端大于右端时查找失败 
	{
		int mid = (left+right)/2;
		if(a[mid] == k )
		{
			ret = mid;//查找成功时的数组下标 
			break;
		}else if(a[mid]>k)
		{
			right = mid - 1;
		}else{
			left = mid +1;
		}
	}
	return ret;
}

int main()
{
	int a[]={2,4,7,11,13,16,21,24,27,32,36,40,46};
	int k;
	printf("请输入要查找的数字:");
	scanf("%d",&k);
	int len = sizeof(a)/sizeof(a[0]);//求数组长度 
	int ret = search(k, a, len);
	if(ret>-1)
	{
		printf("找到数字%d\n数组下标为%d", k,ret);
	 } else
	 {
	 	printf("没有找到数字%d\n",k);
	 }
	return 0;
}

运行结果
在这里插入图片描述
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值