二分查找函数

 arr 是查找的数组
left 数组的左下标
right 数组的右下标
key 要查找的数字
在一个升序数组中查找指定的数值,找到了就返回下标,找不到就返回-1.
int bin_search(int arr[], int left, int right, int key)

int :函数返回值类型

 bin_search:函数名

int arr[], int left, int right, int key:函数参数

#include <stdio.h>
int bin_search(int arr[], int left, int right, int key)
{
	int find  = 0;//用来判断是否找到了数字
	int mid2 = 0;//最终要返回的数字下标
	while (left<=right)//这里是"<="而不是"<"
		//当查找的范围缩小到相邻两个下标时,这两个数字都要检验
		//例如查找58时,利用二分查找会将范围缩小到下标5,6,这时下标5,6都要检验
	{
		int mid = left + (right-left) / 2;//二分法查找
		//每次循环,都会产生新的mid
		if (key > arr[mid])
		{
			left = mid + 1;//数字大于中间值,区间左边下标改为mid+1
			find = 0;
		}
		else if (key < arr[mid])
		{
			right = mid - 1;//数字小于中间值,区间右边下标改为mid-1
			find = 0;
		}
		else
		{
			find = 1;
			mid2 = mid;//最终要找到的数字下标就是当前的mid
			break;
		}
	}
	if (find == 1)
	{
		return mid2;//找到了,返回下标mid2
	}
	else 
	{
		return -1;//没找到,返回-1
	}
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值