[英]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.