题目1.
写一个二分查找函数
功能:在一个升序数组中查找指定的数值,找到了就返回下标,找不到就返回-1.
#include<stdio.h>
int bin_search(int arr[],int sz,int key)
{
int left = 0;
int right = sz-1;
while (left < right)
{
int mid = (left + right) / 2;
if (arr[mid] < key) //注意这里是arr[mid],而不是mid
{
left=mid+1;
right--;
}
else if (arr[mid] > key)
{
left++;
right = mid - 1;
}
else
{
return mid;
}
}
return -1;
}
int main()
{
//创建数组,输入值
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
int sz = sizeof(arr) / sizeof(arr[0]);
int key = 0;
scanf("%d", &key);
//寻找
int t = bin_search(arr,sz,key); //这个是这篇代码的主要关注的内容
//结果
if (t != -1)
{
printf("恭喜你找到了");
printf("%d", t);
}
else
{
printf("找不到了");
}
return 0;
}
在创建函数时一定要考虑清楚是否需要返回值,怎么安排?
创建函数后,我们先定义最左边,和最右边的位置一个名字
二分查找,是优先检测中间的值与你所要寻找数字进行对比
经过对比后,如果mid的值<key,则知道key值是一定在原本中间数字mid的右边的
因此我们可以将范围转移到mid的位置+1位,即代码中的left=mid+1,并且最右边的值位置-1
同样道理,mid的值>key值也是一样的
最后经过查找,left=right时,就证明找到了这个数字的位置了,此时就可以返回mid这个数字了