需要帮助在C中实现二进制搜索

时间:2011-12-04 03:40:01

标签: c search iteration

因为我不希望我的代码被班级中的其他人复制而被编辑。

3 个答案:

答案 0 :(得分:4)

您只需将伪代码转换为代码即可。我会给你一些更精致的伪代码:

1)将我们正在寻找的事物(min)的最小可能位置设置为零。

2)将我们正在寻找的东西(max)的最大可能位置设置到最高位置。

3)将地点loc计算为(min+max)/2

4)检查loc是否包含我们正在寻找的对象。如果是这样,停下来,我们找到了。

5)检查是否min>=max。如果是这样,停止,它不在这里。

5)如果loc处的对象太高,请将max设置为loc-1。 (因为它可能的最大位置比loc少一个,因为loc太高了。)

6)如果loc处的对象太低,请将min设置为loc+1。 (相同的逻辑,反过来。)

7)转到第3步。

答案 1 :(得分:1)

SOLN;

unsigned char  search(int value, int array[], int n)
{
  int start = 0;
  int end = n;
  int mid;

  // We ll exit the while loop if we just started overlapping 
  while(start<=end)
  {
    // Calculating the new mid point
    // Can also be written as mid = (start + end)/2;
    mid = start + (end-start)/2;
    if(value == array[mid])
      return 1;

    // If value is less we search on the left side
    if(value < array[mid])
      end = mid - 1;
    else
      start = mid + 1;
  }
  return 0;
}

答案 2 :(得分:0)

你有算法。只需从两个索引值开始 - 低和高。最初将它们设置为数组中的第一个和最后一个条目。

接下来选择高和低之间的中间值(整数)。探测那个数组元素。如果它等于所需的值,那么你就完成了。如果它低于/小于/早于所需值,则将“低”设置为探测元素索引+1。如果它高于/大于/晚于期望值,则将“高”设置为探测元素索引-1。然后返回(在你的while循环中)并选择一个新的“中途”值。

如果你到达低点&gt;高(检查while条件)然后找不到值。

(我将补充一点,算法基本上很简单,但如果你认为不好并尝试采取一些捷径,可能会令人沮丧。)