返回

C语言—函数实现二分查找(2)

发布时间:2023-05-09 00:02:55 161
一、函数实现的逻辑
二、错误代码示范
三、错误原因和解决方法
四、正确代码示范
五、总结

一、函数实现的逻辑

用函数查找时,先创建一个函数,函数名为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;
}

结果:

C语言—函数实现二分查找(2)_数组

三、错误原因:

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;

}

五、总结:写函数的基本步骤,建议先写函数怎么用,再写函数怎么实现

                 基础知识一定要扎实,要反复看

特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报
评论区(0)
按点赞数排序
用户头像
精选文章
thumb 中国研究员首次曝光美国国安局顶级后门—“方程式组织”
thumb 俄乌线上战争,网络攻击弥漫着数字硝烟
thumb 从网络安全角度了解俄罗斯入侵乌克兰的相关事件时间线
下一篇
变量、常量 2023-05-08 21:15:58