因为我不希望我的代码被班级中的其他人复制而被编辑。
答案 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条件)然后找不到值。
(我将补充一点,算法基本上很简单,但如果你认为不好并尝试采取一些捷径,可能会令人沮丧。)