黑马程序员技术交流社区

标题: 折半查找,哪里出错了? [打印本页]

作者: 乔叶旭    时间: 2012-11-28 21:03
标题: 折半查找,哪里出错了?
本帖最后由 乔叶旭 于 2012-11-28 21:23 编辑

class  Zhebanchazhao
{
        public static void main(String[] args)
        {
                int[]a = new int[]{2,3,7,4,23,8};//定义一个数组
               
                System.out.println(fun(a,4));
        }

        public static int fun(int[] arr,int key) //折半查找算法       总提示这句出错,很迷茫。。。。。
        {
                        int a = 0,b = arr.length-1;
                        int m = (a + b)/2;
                        while (a<=b)
                        {
                                if (arr[m]> key)
                                {
                                        b = m/2-1;

                                }
                                if (arr[m] = key)
                                {
                                        return m;
                                }
                                else {
                                                a =        m/2+1;
                                         }
                        }
                        return -1;

        }
}
作者: 宫明星    时间: 2012-11-28 21:09
本帖最后由 宫明星 于 2012-11-28 21:13 编辑

粗略看了下
   if (arr[m] = key) 里面应该是==

还有就是折半查找要求数组应该是有序的,你的数组是无序的。不过这个跟错误没关系,只不过查东西结果会不准。

最后发现你算法过程也有错误,不过不会报错,继续改进吧。
作者: 乔叶旭    时间: 2012-11-28 21:23
宫明星 发表于 2012-11-28 21:09
粗略看了下
   if (arr[m] = key) 里面应该是==

是,两个错误指示的很明显,但是过程我又试了试,没有错,总之谢谢。
作者: 宫明星    时间: 2012-11-28 21:29
本帖最后由 宫明星 于 2012-11-28 21:31 编辑
乔叶旭 发表于 2012-11-28 21:23
是,两个错误指示的很明显,但是过程我又试了试,没有错,总之谢谢。

你的算法是错的,会变成死循环,我给你改了一下你看看。
  1. class  Zhebanchazhao
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 int[] a = new int[]{2,3,7,8,23,30};//定义一个数组
  6.                
  7.                 System.out.println(fun(a,23));
  8.         }

  9.         public static int fun(int[] arr,int key)
  10.         {
  11.                         int a = 0,b = arr.length-1;
  12.                         int m;
  13.                         while (a<=b)
  14.                         {
  15.                                         m = (a+b)/2;
  16.                                 if (arr[m]> key)
  17.                                 {
  18.                                         b = m-1;
  19.                                 }
  20.                                 else if (arr[m] < key)
  21.                                 {
  22.                                        a = m+1;
  23.                                 }
  24.                                 else {
  25.                                                return m;  
  26.                                          }
  27.                         }
  28.                         return -1;

  29.         }
  30. }
复制代码

作者: coqns    时间: 2012-11-28 23:37
我把你的代码截图,标注,告诉你分别哪几个地方错了

123.jpg (94.47 KB, 下载次数: 40)

我把你的代码截图,标注,告诉你分别哪几个地方错了

我把你的代码截图,标注,告诉你分别哪几个地方错了

作者: 乔叶旭    时间: 2012-11-29 00:15
本帖最后由 乔叶旭 于 2012-11-29 01:06 编辑
宫明星 发表于 2012-11-28 21:29
你的算法是错的,会变成死循环,我给你改了一下你看看。

是的,错了,谢谢!!!
作者: 乔叶旭    时间: 2012-11-29 00:20
coqns 发表于 2012-11-28 23:37
我把你的代码截图,标注,告诉你分别哪几个地方错了

哦,是,我错了,谢谢。
作者: 乔叶旭    时间: 2012-11-29 00:21
宫明星 发表于 2012-11-28 21:29
你的算法是错的,会变成死循环,我给你改了一下你看看。

是,谢谢了!




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