二分搜索 – 如果我从列表中间添加或减去“1”,我会得到中间一个左边的第一个数字还是一个数值?

我怀疑发生在while循环中。 当我将“1”添加到列表的最小值和最大值时,我在做什么 – 我是移动到列表中数字的左/右还是以数字方式更改值? 谢谢!

bool search(int value, int values[], int n) { if (n  0) { if (value > value[middle]) { min = middle + 1; } else if (value < value[middle]) { max = middle - 1; } else if (value == value[middle]) { return true; } } } 

让我们认为您的值数组如下:1 2 5 6 9所以min = 1,max = 9,mid = 5; 现在假设你的值是7然后if (value > value[middle]){min = middle + 1;}这个块将是活动的。

现在看,因为我们确定我们的值大于中间值,所以我们可以将最小值增加到值数组的(mid + 1)索引。

同样适用于较小的情况。 所以你实际上是移动值数组的最小/最大索引。 希望有所帮助

您的function在很多方面都被打破了:

  • 它没有实现二进制搜索
  • MAX不是很大 ,甚至没有在任何地方使用过
  • middle是未定义的,并且它不会在循环中修改。
  • value > value[middle]应该是value > values[mid]

这是一个简单的正确实现(从Matt Timmermans借来):

 bool search(int value, int values[], size_t n) { size_t pos = 0; size_t limit = n; while (pos < limit) { size_t middle = pos + ((limit - pos) >> 1); if (values[middle] < value) pos = middle + 1; else limit = middle; } return pos < n && values[pos] == value; }