问题描述
二分查找函数
#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
等关键字不应用作变量名称。