黑马程序员技术交流社区
标题:
折半查找问题
[打印本页]
作者:
睡不够的猪
时间:
2013-9-6 19:53
标题:
折半查找问题
本帖最后由 睡不够的猪 于 2013-9-6 20:02 编辑
class ZheBan
{
public static void main(String[] args)
{
int[] arr={1,5,8,7,9,11,25,36};
int x=getIndex(arr,9);
System.out.println(x);
System.out.println("hello");
}
public static int getIndex(int[] arr,int key)
{
int min=0,max=arr.length-1,mid;
while(min<=max)
{
mid=(min+max)>>2;
if(key>arr[mid])
min=mid+1;
else if(key<arr[mid])
max=mid-1;
else
return mid;
}
return min;
}
}
这段代码应该没有问题吧 因为每次用javac编译都能通过,可是为什么每次用java执行的时候 dos窗口都不动呢?(有点像是dos卡死了。。。)
请问还有没有遇到过这种情况呢 该怎么办呢???
FX2PPQQ6IVX_1`6]M30O3)0.jpg
(30.81 KB, 下载次数: 31)
下载附件
出现这种状态后 上下键和enter键都没用了。
2013-9-6 19:52 上传
作者:
xiaoxu
时间:
2013-9-6 20:03
首先折半查找是建立在数组有序的基础上的,你这数组是无序的。
然后mid=(min+max)>>2;这条指令有问题,该为mid=(min+max)>>1;右移1位就是除2,移2位是除4
作者:
睡不够的猪
时间:
2013-9-6 20:03
晕死 弄错了个数字 折磨了我半天。。。
mid=(min+max)>>2;
应该是:mid=(min+max)>>1;
作者:
高波
时间:
2013-9-6 20:06
你的代码在你求mid值时出错了,好好看看怎样用位移运算吧
class ZheBan
{
public static void main(String[] args)
{
int[] arr={1,5,8,7,9,11,25,36};
int x=getIndex(arr,9);
System.out.println(x);
System.out.println("hello");
}
public static int getIndex(int[] arr,int key)
{
int min=0,max=arr.length-1,mid;
while(min<=max)
{
//向右移几位,就是除以2的几次幂,你要除以2,右移1位就行
mid=(min+max)>>1;
if(key>arr[mid])
min=mid+1;
else if(key<arr[mid])
max=mid-1;
else
return mid;
}
return min;
}
}
复制代码
作者:
李锡碧
时间:
2013-9-6 20:06
class ZheBan {
public static void main(String[] args) {
int[] arr = { 1, 5, 8, 7, 9, 11, 25, 36 };
int x = getIndex(arr, 9);
System.out.println(x);
System.out.println("hello");
}
public static int getIndex(int[] arr, int key) {
int min = 0, max = arr.length - 1, mid;
while (min <= max) {
mid = (min + max) >> 1;
if (key > arr[mid])
min = mid + 1;
else if (key < arr[mid])
max = mid - 1;
else
return mid;
}
return min;
}
}
复制代码
第12行 mid = (min + max) >> 1;
作者:
胡志翔
时间:
2013-9-6 20:12
mid=(min+max)>>2;
2改成1,
右移2是除以4
要折半除以2要右移1
作者:
Bad_Boy
时间:
2013-9-6 20:14
循环条件有问题,是个死循环:
public static int getIndex(int[] arr,int key)
{
int min=0,max=arr.length-1,mid=(min + max)/2;
while(arr[mid]!=key)
{
if(key>arr[mid]){
min=mid+1;
}else {
max=mid-1;
}
mid=(min+max)/2;
}
return min;
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2