黑马程序员技术交流社区
标题:
结果怎么不对捏。。。
[打印本页]
作者:
成都校区
时间:
2012-4-30 19:00
标题:
结果怎么不对捏。。。
class HalfFind
{
public static void main(String[] args)
{
int[] arr = {2,3,4,5,6,7,8,9};
System.out.println(find(arr,1));
}
static int find(int[]arr,int value)
{
int min =0;
int max =arr.length-1;
int mid =(min+max)/2;
if(arr[mid]!=value) {
if (value > arr[mid])
{
min =mid+1;
}
else if ((value < arr[mid]))
{
max=mid-1;
}
if (min>max)
{
return -1;
}
mid =(min+max)/2;
}
return mid;
}
}
作者:
罗旭维
时间:
2012-4-30 19:06
没有用递归必然要用到循环,楼主应该把搜索的代码放在循环中。
作者:
贾联国
时间:
2012-4-30 19:13
原因是你用的是if 而这里要用循环
class HalfFind
{
public static void main(String[] args)
{
int[] arr = {2,3,4,5,6,7,8,9};
System.out.println(find(arr,1));
}
static int find(int[]arr,int value)
{
int min =0;
int max =arr.length-1;
int mid =(min+max)/2;
while(arr[mid]!=value) //
这里要用循环才能正确的进行二分法查值
{
if (value > arr[mid])
{
min =mid+1;
}
else if ((value < arr[mid]))
{
max=mid-1;
}
if (min>max)
{
return -1;
}
mid =(min+max)/2;
}
return mid;
}
}
作者:
何阳
时间:
2012-4-30 19:28
class HalfFind
{
public static void main(String[] args)
{
int[] arr = {2,3,4,5,6,7,8,9};
System.out.println(find(arr,1));
}
static int find(int[]arr,int value)
{
int min =0;
int max =arr.length-1;
int mid =(min+max)/2;
//因为if循环执行一次,当你要查找的值不等于的时候,执行if里面的语句,就是把
//把你所设定的角标改变,然后执行return mid.
//if是分支语句,而while是循环语句,你所查找的数字不等于数组中的中间值时,他
//分缩小范围继续查找,但是if就执行了一次,所以你应该用while循环,这个是二分
//查找的原理。应该修改为while(arr[mid]!=value)
if(arr[mid]!=value) //
if (value > arr[mid])
min =mid+1;
else if ((value < arr[mid]))
max=mid-1;
if (min>max)
return -1;
mid =(min+max)/2;
}
return mid;
}
}
作者:
成都校区
时间:
2012-5-2 18:28
哦 没有注意到,谢了撒!
作者:
aawenwei
时间:
2015-6-16 00:34
娃哈哈 。。 飞哥 我看到了
作者:
成都校区
时间:
2016-4-28 10:33
aawenwei 发表于 2015-6-16 00:34
娃哈哈 。。 飞哥 我看到了
好尴尬
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2