我想通過使用只有3個參數int值(我在找什麼),int值[](數組),int n中以稍微非傳統的方式實現二進制搜索(數組的大小)。下面的代碼找到數字2,並認識到13不存在,但找不到像6或7這樣的數字。我認爲問題出現在最終的遞歸調用中。這可能是一個指針問題。我敢肯定,其餘的代碼工作正常。任何想我可能會出錯的想法,將不勝感激。二進制搜索段錯誤
#include <stdio.h>
#include <stdbool.h>
bool search(int value, int values[], int n);
int main(void)
{
int value = 6;
int values[] = {1, 2, 3, 4, 5, 6, 7};
int n = 7;
bool x = search(value, values, n);
if (x == true)
printf("found\n");
else
printf("not found\n");
}
bool search(int value, int values[], int n)
{
int midpoint = n/2;
if (n/2 <= 0)
{
return false;
}
if (value == values[midpoint])
{
return true;
}
if (value < values[midpoint])
{
return search(value, values, n/2);
}
else if (value > values[midpoint])
{
return search(value, values, n/2);
}
return false;
}
你需要像'values + n - n/2'(這與'values + n/2'不一樣)。 – user3386109
我記下我確定遵循,因爲values是數組的名稱。增加數量n/2似乎並不合理。儘管如此,我一定會玩弄它。非常感謝您的回覆! – Ryan
'if(n/2 <= 0)'錯誤。 0是一個有效的數組索引。這就是爲什麼你的代碼在數組切片的開始處找不到任何值的原因。 – tofro