用函数实现有序数组二分查找

程序功能:

在一个有序数组里,查到某个数字,若找到输出该数字下标,找不到输出“No found!”。

设计思想:

要查找的数与中间的数组元素进行比较,根据大小比较结果确定要在哪个范围内继续查找,重复若干次直到查到或没有查到。

完整代码:

#include<stdio.h>
int SearchNumber(int arr[], int k,int sz)
{
	
	int left = 0;
	int right = sz - 1;

	while (left<=right)
	{
		int mid = (left + right) / 2;	//求中间元素的下标
		if (arr[mid] < k)
			left = mid + 1;				//更新左下标
		else if (arr[mid] > k)
			right = mid - 1;			//更新右下标
		else
			return mid;					//找到了,传回下标
	}
	return -1;		//只有找不到了,才会传-1
}
int main()
{
	int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
	int key = 0;
	int location = 0;
	int sz = sizeof(arr) / sizeof(arr[0]);	//求数组大小
	location = SearchNumber(arr, key,sz);	//传递首元素的地址
	if (location >= 0)
		printf("Location is %d\n", location);
	else
		printf("No found!\n");
	return 0;
}

收获和感想:

二分查找可以大大提高有序数组查找效率。

1.求数组大小是用sizeof()函数。

2.数组传参是传递的是数组首元素的地址,所以求数组大小只能在主函数里求,然后传参给SearchNumber()函数。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

晨露02

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

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

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

打赏作者

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

抵扣说明:

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

余额充值