黑马程序员技术交流社区
标题:
程序员不能瞎大方
[打印本页]
作者:
汪振
时间:
2013-3-13 15:18
标题:
程序员不能瞎大方
private void button1_Click(object sender, EventArgs e)
{
int[] a = { 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17};//数组
int key = int.Parse(txtKey.Text);//找到要搜索的那个KEY
int location = BindarySearch(a, key);//位置
s.Text += "位置"+location;
if (location == -1)
{
s.Text += "未发现";
}
}
public int BindarySearch(int[] array, int key)//返回所在的位置
{
int low = 0, high = array.Length - 1;
int middle;
while (low <= high)
{
middle = (low + high) / 2;
if (array[middle] == key)
{
return middle;
}
else if (array[middle] > key)
{
high = middle - 1;
}
else
{
low = middle + 1;
}
s.Text += middle.ToString()+" ";
}
return -1;
}
复制代码
折半法查找元素在数组中的位置,在
“
middle = (low + high) / 2;
if (array[middle] == key)
{
return middle;
}
else if (array[middle] > key)
{
high = middle - 1;
}
else
{
low = middle + 1;
}
”
刚开始我想,把high往后延长一个,low往前一格
“这样计算也增加不了很多,更加严谨”,可是我发现我犯了一个致命的错误,比方一个1-17的数组,如果我想查找16这个数
因为我的大方,问题来了,中间值是14,然后low=middle-1;那么low又成13了,(13+16)/2=14
噢啦陷入死循环了!其实我前面设置了一道官桥,不相等才能往下判断,这个扩大范围其实不必要{:soso_e114:}写代码必须严谨
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2