我在 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

请注意,searchsize 等关键字不应用作变量名称。