黑马程序员技术交流社区
标题:
看看错哪了~纠结额
[打印本页]
作者:
骆龙
时间:
2012-2-26 21:25
标题:
看看错哪了~纠结额
class Test
{
public static void main(String[] args)
{
int[] arr={12,6,72,34,36,7,6,5,8,2};
int index=halfSearch(arr,2);
System.out.println("index="+index);
}
public static int halfSearch(int[] arr,int key)
{
int min,max,mid;
min=0;
max = arr.length-1;
mid = (max+min)/2;
while (arr[mid]!=key)
{
if (key>arr[mid])
min=mid+1;
else if (key<arr[mid])
max=mid-1;
if(min>max)
return -1;
mid=(min+max)/2;
}
return mid;
}
}
复制代码
不知道错哪了 不管查哪个数都 是 index=-1 的结果。。。。
作者:
杨盼
时间:
2012-2-26 21:38
while (arr[mid]!=key)
{
if (key>arr[mid])
min=mid+1;
else if (key<arr[mid])
max=mid-1;
if(min>max)
return -1;
mid=(min+max)/2;
}
复制代码
这个while循换在return -1之前根本跳不出来,
作者:
杨盼
时间:
2012-2-26 21:39
本帖最后由 蓝色火焰 于 2012-2-26 21:47 编辑
你在比较min和max之前先输出min和max就知道怎么回事了,你要实现折半查找首先要将数列按有序化(递增或递减)排列,才可以,不然你找的那一半永远找不到想要的,没找的那一半到有你想要的
作者:
骆龙
时间:
2012-2-26 21:46
感觉代码 没有问题啊啊~~却怎么也找不出结果错哪了 疯了要
作者:
杨盼
时间:
2012-2-26 21:47
你看楼上,刚给你回复了
作者:
骆龙
时间:
2012-2-26 21:52
蓝色火焰 发表于 2012-2-26 21:39
你在比较min和max之前先输出min和max就知道怎么回事了,你要实现折半查找首先要将数列按有序化(递增或递减) ...
怎么跳不出来? 当 key=arr[mid] 时它就跳出来了,结束循环 return mid
作者:
沈样
时间:
2012-2-26 21:53
你这个是折半查找吧,第一步就错了,这个数组必须是有顺序的
作者:
骆龙
时间:
2012-2-26 21:55
蓝色火焰 发表于 2012-2-26 21:39
你在比较min和max之前先输出min和max就知道怎么回事了,你要实现折半查找首先要将数列按有序化(递增或递减) ...
知道为什么 非常感谢
作者:
杨盼
时间:
2012-2-26 22:06
不客气,大家一起加油吧
作者:
葛尧
时间:
2012-2-27 14:33
本帖最后由 葛尧 于 2012-2-27 14:34 编辑
上面说的不错啊
作者:
张红
时间:
2012-2-28 14:35
import java.util.*;
class Test
{
public static void main(String[] args)
{
int[] arr={12,6,72,34,36,7,6,5,8,2};
Arrays.sort(arr);
int index=halfSearch(arr,6);
System.out.println("index="+index);
}
public static int halfSearch(int[] arr,int key)
{
int min,max,mid;
min=0;
max = arr.length-1;
mid = (max+min)/2;
while (arr[mid]!=key)
{
if (key>arr[mid])
min=mid+1;
else if (key<arr[mid])
max=mid-1;
if(min>max)
return -1;
mid=(min+max)/2;
}
return mid;
}
}
这是折半查找的一个局限条件,必须是有序数组。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2