黑马程序员技术交流社区

标题: 折半查找 [打印本页]

作者: 城北一直晴。    时间: 2015-5-15 08:50
标题: 折半查找
本帖最后由 城北一直晴。 于 2015-5-15 09:14 编辑

{
public static void main (String[] args)
{
  int[] arr={3,1,5,4,2,9};
  int index =getIndex (arr4);
  System.out.println ("Index=" +Index);
  }
public static int getIndex(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=(max+min)/2;
   }
  return mid;
}
}//Java它的时候陷入死循环,没有结果。怎么办?

作者: KK要有光    时间: 2015-5-15 09:04
System.out.println ("Index=" +Index);
作者: 城北一直晴。    时间: 2015-5-15 09:11
KK要有光 发表于 2015-5-15 09:04
System.out.println ("Index=" +Index);

上面的都改过来了,但是java的时候变成了死循环
作者: 赵旗    时间: 2015-5-15 09:52
折半查找法是有前提的  要是先进行过排序的才能用折半查找法   你那是无序数组
作者: 油炸电视剧    时间: 2015-5-15 11:12
同楼上所说,折半查找是要先排序的,然后再查找。
作者: 痲ボㄋ.    时间: 2015-5-15 11:21
折半查找首先你的数组必须是有序的,而你的数据无序;第二你while循环里面if、else if都是判断key<arr[mid],应该是key<arr[mid]时max = mid-1;key>arr[mid]时min =mid+1;
作者: 城北一直晴。    时间: 2015-5-16 17:50
赵旗 发表于 2015-5-15 09:52
折半查找法是有前提的  要是先进行过排序的才能用折半查找法   你那是无序数组  ...

谢谢哈,已经改过来了
作者: 城北一直晴。    时间: 2015-5-16 17:53
痲ボㄋ. 发表于 2015-5-15 11:21
折半查找首先你的数组必须是有序的,而你的数据无序;第二你while循环里面if、else if都是判断key ...

谢谢,已经改过来了。
作者: xingfeichen    时间: 2015-5-16 19:13
折半查找只针对有序数组
作者: 二大爷    时间: 2015-5-16 21:06
你的数组是无序的  ,折半查找的前提数组必须是有序的
作者: leeshaodong    时间: 2015-5-16 21:32
折半查找的对象数组必须是个有序的数组。好吧,我不知道你在干什么。
作者: 我干阿衰    时间: 2015-5-16 21:40
  if(key<arr[mid])
      min=mid+1;
   else if (key<arr[mid])
       max=mid-1;

第一个if应该改成key>arr[mid]




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2