黑马程序员技术交流社区

标题: 看看错哪了~纠结额 [打印本页]

作者: 骆龙    时间: 2012-2-26 21:25
标题: 看看错哪了~纠结额
  1. class  Test
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 int[] arr={12,6,72,34,36,7,6,5,8,2};
  6.                 int index=halfSearch(arr,2);
  7.                 System.out.println("index="+index);
  8.         }

  9.         public static int halfSearch(int[] arr,int key)
  10.         {
  11.                 int min,max,mid;
  12.                 min=0;
  13.                 max = arr.length-1;
  14.                 mid = (max+min)/2;
  15.                         
  16.                         while (arr[mid]!=key)
  17.                         {
  18.                                 if (key>arr[mid])
  19.                                                 min=mid+1;
  20.                                 else if (key<arr[mid])
  21.                                                 max=mid-1;
  22.                                 
  23.                                 if(min>max)
  24.                                         return -1;
  25.                                 mid=(min+max)/2;
  26.                         }
  27.                         return mid;
  28.         }
  29. }
复制代码
不知道错哪了 不管查哪个数都 是 index=-1 的结果。。。。
作者: 杨盼    时间: 2012-2-26 21:38
  1.                         while (arr[mid]!=key)

  2.                     {

  3.                                if (key>arr[mid])

  4.                                                 min=mid+1;

  5.                                 else if (key<arr[mid])

  6.                                                max=mid-1;

  7.                              

  8.                               if(min>max)

  9.                                        return -1;

  10.                               mid=(min+max)/2;

  11.                       }

复制代码
这个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