C语言—函数实现二分查找(2)
发布时间:2023-05-09 00:02:55 256 相关标签:
一、函数实现的逻辑
二、错误代码示范
三、错误原因和解决方法
四、正确代码示范
五、总结
一、函数实现的逻辑
用函数查找时,先创建一个函数,函数名为binary_search并思考三个问题:1、在哪查找2、找谁3、找到后会得到一个什么样的结果
二、错误代码示范
#include
int binary_search(int arr[], int k)//实际上arr[]是指针
{
int sz = sizeof(arr) / sizeof(arr[0]);
int left = 0;
int right = sz-1;
int mid = 0;
while (left<=right)
{
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()
{
int ret = 0;
int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
int k = 7;//查找数字7
ret=binary_search(arr,k);
if (ret == -1)
{
printf("找不到\n");
}
else
{
printf("找到了,下标是:%d\n",ret);
}
return 0;
}
结果:
三、错误原因:
arr是数组,数组在传参时,传递过去的是数组首元素的地址。 参数中arr[]实际上是一个指针,指针的空间大小是4/8,所以使用sizeof()之后,sz的值是1/2,使得right的值错误
解决方法:把sz在main()函数中求出来,之后再传给函数,就能得到sz,right的正确值
四、正确代码示范
#include
int binary_search(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)
{
right = mid - 1;
}
else if (arr[mid] < k)
{
left = mid + 1;
}
else
return mid;
}
return -1;
}
int main()
{
int ret = 0;
int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
int k = 7;
int sz = sizeof(arr) / sizeof(arr[0]);
ret=binary_search(arr,k,sz);
if (ret == -1) //找不到这个数字,ret返回-1
{
printf("找不到\n");
}
else
{
printf("找到了,下标是:%d\n",ret);//找到了,ret返回数字对应的下标
}
return 0;
}
五、总结:写函数的基本步骤,建议先写函数怎么用,再写函数怎么实现
基础知识一定要扎实,要反复看
文章来源: https://blog.51cto.com/u_15908092/5976293
特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报