我在C和I'中实现二进制搜索;我面临的问题是它没有打印元素的索引号
用于二进制搜索的函数我在C和I'中实现二进制搜索;我面临的问题是它没有打印元素的索引号,c,binary-search,linear-search,C,Binary Search,Linear Search,用于二进制搜索的函数 #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
#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;
}
所以,我的问题是它没有打印这一行,首先,编译器没有执行程序。每当我尝试执行它时,我的电脑就会挂起
printf("The element %d was found at index %d", element, search);
return 0;
}
您的问题是忘记声明initializes/defines
mid
,这将导致(在此之后,您的程序可能会发生任何事情)。每次循环运行时,您还需要重新计算mid
另外,正如下面提到的@DavidC.Rankin,您的sizer
参数是非常不必要的
修改代码:
#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", element, searchResult);
return 0;
}
#包括
int二进制搜索(int arr[],int元素,int低,int高)
{
int mid;//在这里声明
而(low您的问题是您忘记声明initializes/definesmid
,这将导致(之后,您的程序可能会发生任何事情)。您还需要在每次循环运行时重新计算mid
另外,正如下面提到的@DavidC.Rankin,您的sizer
参数是非常不必要的
修改代码:
#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", element, searchResult);
return 0;
}
#包括
int二进制搜索(int arr[],int元素,int低,int高)
{
int mid;//在这里声明
while(low)您是否声明了mid
?您是如何计算mid
?i@silverfox你的意思是mid=(低+高)/2;谢谢,伙计!我完全忘记了mid。mid
用于未初始化调用未定义的行为。参数int size
未使用。你可以使用intmid=low+((高-低)/2)
此公式可避免溢出您是否声明了mid
?您如何计算mid
?i@silverfox你的意思是mid=(低+高)/2;谢谢,伙计!我完全忘记了mid。mid
用于未初始化调用未定义的行为。参数int size
未使用。你可以使用intmid=low+((高-低)/2)
这个公式可以避免溢出pick:我想说OP的代码声明了mid
,但从来没有定义/初始化它。我可以看到它存在并且是一个int,但它的初始值正好是堆栈中发生的任何事情。@Caleb啊,我的错误。我本来是要键入initializes的。Thanks代表澄清者!@DavidC.Rankin没问题,请继续。吹毛求疵:我想说OP的代码声明了mid
,但从来没有定义/初始化它。我可以看到它存在,它是一个int,但它的初始值正好是堆栈中那个位置发生的任何事情。@Caleb啊,我的错误。我是想输入的初始化。感谢澄清器!@DavidC.Rankin没问题,继续。