gpt4 book ai didi

c - PSet 3 - CS50 - 二进制搜索实现

转载 作者:太空宇宙 更新时间:2023-11-04 05:58:10 26 4
gpt4 key购买 nike

这是 edX.org 上 CS50 类(class)的 PSET 3。

我已经为这个问题集苦苦挣扎了很长时间;特别是,我无法使 binarySearch 函数工作。我一直遇到段错误,但我不知道如何处理它。我花了很多时间思考这个问题,但我就是看不到。

这是我的代码。有人可以从概念上指出我在这里歪斜的地方吗?谢谢。

#include <stdio.h>
#include <cs50.h>

bool binarySearch(int value, int values[], int min, int max)
{
bool answer = false;

if (max < min)
{
answer = false;
}

else if (values[max] == value)
{
answer = true;
}

else if (values[min] == value)
{
answer = true;
}

else
{
int midPoint = (max + min) / 2;

if (values[midPoint] == value)
{
answer = true;
}

else if (values[midPoint] > value)
{
answer = binarySearch(value, values, min, midPoint);
}

else
{
answer = binarySearch(value, values, midPoint, max);
}
}

return answer;
}

int main (int argc, char *argv[])
{
int value = 34;

int values[] = {11,22,33,44,55,66,77,88,99,1010};

int max = sizeof(values) / sizeof(int);

if (binarySearch(value, values, 0, max - 1))
{
printf("Found needle!\n");
}

else
{
printf("Did not find needle\n");
}
}

当我搜索的值不在数组中时,我不断收到段错误。

最佳答案

我认为您应该将代码更改为:

 else
{
int midPoint = (max + min) / 2;

if (values[midPoint] == value)
{
answer = true;
}

else if (values[midPoint] > value)
{
answer = binarySearch(value, values, min, midPoint-1); // not midPoint
}

else
{
answer = binarySearch(value, values, midPoint+1, max); //not midPoint
}
}

关于c - PSet 3 - CS50 - 二进制搜索实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23235566/

26 4 0
文章推荐: html -
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com