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
}
}