如何解决我在 C 中实现二分搜索,但我面临的问题是它不打印元素的索引号
二分查找函数
#include <stdio.h>
int binarySearch(int arr[],int size,int element,int low,int high)
{
int mid;
while (low <= high)
{
if (arr[mid] == element)
{
return mid;
}
if (element < arr[mid]) //element is on the left side
{
high = mid - 1;
}
else
{
low = mid + 1; //element is on the right side
}
}
return -1;
}
主程序从这里开始
int main()
{
int arr[] = {1,5,10,16,24,30,50,100};
int size = sizeof(arr) / sizeof(int);
int element = 10;
int low = 0;
int high = size - 1;
int search = binarySearch(arr,size,element,low,high);
所以,我的问题是它没有打印这一行,首先,编译器没有执行程序。每当我尝试执行它时,我的电脑就会挂起
printf("The element %d was found at index %d",search);
return 0;
}
解决方法
你的问题是你忘记declare初始化/定义mid
,这将导致undefined behavior(之后,你的程序可能会发生任何事情)。您还需要在每次循环运行时重新计算 mid
。
此外,正如@DavidC.Rankin 在下面提到的,您的 sizeArr
参数是完全没有必要的。
修改后的代码:
#include <stdio.h>
int binarySearch(int arr[],int element,int low,int high)
{
int mid; //declare here
while (low <= high)
{
mid = (low+high)/2; //recalculate here
if (arr[mid] == element)
{
return mid;
}
else if (element < arr[mid]) //element is on the left side
{
high = mid - 1;
}
else
{
low = mid + 1; //element is on the right side
}
}
return -1;
}
int main()
{
int arr[] = {1,5,10,16,24,30,50,100};
int sizeArr = sizeof(arr) / sizeof(int);
int element = 10;
int low = 0;
int high = sizeArr - 1;
int searchResult = binarySearch(arr,sizeArr,element,low,high);
printf("The element %d was found at index %d",searchResult);
return 0;
}
结果:The element 10 was found at index 2
请注意,search
或 size
等关键字不应用作变量名称。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。