黑马程序员技术交流社区
标题:
折半查找
[打印本页]
作者:
893269222
时间:
2015-3-29 10:57
标题:
折半查找
运行没有结果
class Demo7_2
{
public static void main(String[] args)
{
//折半查找
int [] arr={1,5};
int index=HalfSearch(arr,5);
System.out.println("Index="+index);
}
public static int HalfSearch(int[] arr,int key)
{
int min,max,mid;
min=0;
max=arr.length-1;
mid=(min+max)/2;
do
{
if (key<arr[mid])
max=mid-1;
else if (key>arr[mid])
min=mid+1;
mid=(min+max)/2;
}
while (key==arr[mid]);
return arr[mid];
}
}
作者:
dongfang1
时间:
2015-3-29 12:09
你这个 返回的是5吧。。。不是应该返回脚标呢?
作者:
圣光忏悔
时间:
2015-3-29 12:27
//有两个问题.
public class Demo7_2 {
public static void main(String[] args) {
// 折半查找
int[] arr = { 1, 5 };
int index = HalfSearch(arr, 5);
System.out.println("Index=" + index);
}
public static int HalfSearch(int[] arr, int key) {
int min, max, mid;
min = 0;
max = arr.length - 1;
mid = (min + max) / 2;
do {
if (key < arr[mid])
max = mid - 1;
else if (key > arr[mid])
min = mid + 1;
mid = (min + max) / 2;
} while (key == arr[mid]);//第一,这里的判断条件是key == arr[mid]
//也就是当相等了就继续进去查找,不等就不管了....
return arr[mid];//第二,这里你返回的是arr[]数组中指数锁对应的值,也就是五,而你想要的是指数...
}
}
复制代码
作者:
Grady
时间:
2015-3-29 12:32
else if (key>arr[mid])
min=mid+1;
mid=(min+max)/2;
这句话有问题吧,max的值也应该变一下。
如果这个是do{}while();语句的话这个循环条件写的也有问题,因为只有当key==arr[mid]才会进循环吧。
作者:
893269222
时间:
2015-3-29 16:51
圣光忏悔 发表于 2015-3-29 12:27
多谢,当时想到while语句和都do while可以互换,就尝试一下,结果还是基础没学好,
作者:
守护莹到老
时间:
2015-3-29 20:56
当时想到while语句和都do while可以互换,就尝试一下,结果还是基础没学好,
作者:
七十九刀
时间:
2015-3-29 22:51
while()里面判断条件的Error
作者:
wf111sxwf
时间:
2015-3-29 23:20
while (key==arr[mid]); 这个条件 你再仔细想想 你这个循环会执行几次
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2