繁体   English   中英

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

[英]Need help in implementing a binary search in C

由于我不希望我的代码被班上其他人复制的原因而将其删除。

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

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。

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;
}

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

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

如果到达从低到高的位置(在while条件下检查),则找不到该值。

(我要补充一点,该算法基本上很简单,但是如果您认为效果不佳并尝试采用一些捷径,则可能会令人沮丧。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM