這是來自edX.org CS50課程的PSET 3。PSet 3 - CS50 - 二進制搜索實用
我一直在努力解決這個問題很長一段時間;特別是,我無法使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");
}
}
當我搜索的值不在數組中時,我總是收到分段錯誤。
這已經晚了,我的大腦正在關閉。在審查你的代碼時,可能是行'int max = sizeof(values)/ sizeof(int);'你可能希望'printf(「max [%d] \ n」,max);'並確認它打印出你期望的(即:10?)。 –
爲什麼不用'while'做簡單的迭代?它比遞歸更簡單,更快速,更安全... – CiaPan
@Mahonri - 我之前測試過它,它會出現最大的正確大小。 – user3237895