Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我在C和I'中实现二进制搜索;我面临的问题是它没有打印元素的索引号_C_Binary Search_Linear Search - Fatal编程技术网

我在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/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;//在这里声明

while(low)您是否声明了
mid
?您是如何计算
mid
?i@silverfox你的意思是mid=(低+高)/2;谢谢,伙计!我完全忘记了mid。
mid
用于未初始化调用未定义的行为。参数
int size
未使用。你可以使用int
mid=low+((高-低)/2)
此公式可避免溢出您是否声明了
mid
?您如何计算
mid
?i@silverfox你的意思是mid=(低+高)/2;谢谢,伙计!我完全忘记了mid。
mid
用于未初始化调用未定义的行为。参数
int size
未使用。你可以使用int
mid=low+((高-低)/2)
这个公式可以避免溢出pick:我想说OP的代码声明了
mid
,但从来没有
定义
/
初始化它。我可以看到它存在并且是一个int,但它的初始值正好是堆栈中发生的任何事情。@Caleb啊,我的错误。我本来是要键入initializes的。Thanks代表澄清者!@DavidC.Rankin没问题,请继续。吹毛求疵:我想说OP的代码声明了
mid
,但从来没有
定义
/
初始化它。我可以看到它存在,它是一个int,但它的初始值正好是堆栈中那个位置发生的任何事情。@Caleb啊,我的错误。我是想输入的初始化。感谢澄清器!@DavidC.Rankin没问题,继续。