一、通过建立一个binary_search函数进行二分查找
#include <stdio.h>
#include <string.h>
int binary_search(int arr[],int k,int sz)
{
//算法实现。
//int sz = sizeof(arr)/sizeof(arr[0]);
int left = 0;
int right = sz-1;
int mid = 0;
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;
}
int main()
{
//在有序的数组里面查找
//如果找到了就返回这个数的下标,找不到就返回-1
int arr[] = {1,2,3,4,5,6,7,8,9,10};
int k = 4;
int sz = sizeof(arr)/sizeof(arr[0]);
int ret=binary_search(arr,k,sz);
//先写函数这么用,再写函数怎么实现。
if (ret == -1)
{
printf("找不到指定的数字\n");
}
else
{
printf("找到了下标是:%d\n",ret);
}
return 0;
}
二、建立函数的逻辑方法是先写主函数,把外部函数看成一个整体,写函数应该怎么用
函数的返回值有两个,一个是-1(可以理解为假),另一个返回值是ret,被查找的数下标。
三、外部函数的实现方法
函数有三个整形值,分别是字符串,被查找数,以及元素个数。
这里特别提醒,元素个数必须放在主函数里面进行计算,因为外部函数返回的是一个整形,因此长度是4, 计算出的sz是1,不符合我们的逻辑。