A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 城北一直晴。 中级黑马   /  2015-5-15 08:50  /  481 人查看  /  11 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 城北一直晴。 于 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它的时候陷入死循环,没有结果。怎么办?

11 个回复

倒序浏览
System.out.println ("Index=" +Index);
回复 使用道具 举报
KK要有光 发表于 2015-5-15 09:04
System.out.println ("Index=" +Index);

上面的都改过来了,但是java的时候变成了死循环
回复 使用道具 举报
折半查找法是有前提的  要是先进行过排序的才能用折半查找法   你那是无序数组
回复 使用道具 举报
同楼上所说,折半查找是要先排序的,然后再查找。
回复 使用道具 举报
折半查找首先你的数组必须是有序的,而你的数据无序;第二你while循环里面if、else if都是判断key<arr[mid],应该是key<arr[mid]时max = mid-1;key>arr[mid]时min =mid+1;
回复 使用道具 举报
赵旗 发表于 2015-5-15 09:52
折半查找法是有前提的  要是先进行过排序的才能用折半查找法   你那是无序数组  ...

谢谢哈,已经改过来了
回复 使用道具 举报
痲ボㄋ. 发表于 2015-5-15 11:21
折半查找首先你的数组必须是有序的,而你的数据无序;第二你while循环里面if、else if都是判断key ...

谢谢,已经改过来了。
回复 使用道具 举报
折半查找只针对有序数组
回复 使用道具 举报
你的数组是无序的  ,折半查找的前提数组必须是有序的
回复 使用道具 举报
折半查找的对象数组必须是个有序的数组。好吧,我不知道你在干什么。
回复 使用道具 举报
  if(key<arr[mid])
      min=mid+1;
   else if (key<arr[mid])
       max=mid-1;

第一个if应该改成key>arr[mid]
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马