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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 乔叶旭 中级黑马   /  2012-11-28 21:03  /  2323 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 乔叶旭 于 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;

        }
}

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1 神马都是浮云

查看全部评分

7 个回复

倒序浏览
本帖最后由 宫明星 于 2012-11-28 21:13 编辑

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

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

最后发现你算法过程也有错误,不过不会报错,继续改进吧。
回复 使用道具 举报
宫明星 发表于 2012-11-28 21:09
粗略看了下
   if (arr[m] = key) 里面应该是==

是,两个错误指示的很明显,但是过程我又试了试,没有错,总之谢谢。
回复 使用道具 举报
本帖最后由 宫明星 于 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. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
我把你的代码截图,标注,告诉你分别哪几个地方错了

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

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

我把你的代码截图,标注,告诉你分别哪几个地方错了
回复 使用道具 举报
本帖最后由 乔叶旭 于 2012-11-29 01:06 编辑
宫明星 发表于 2012-11-28 21:29
你的算法是错的,会变成死循环,我给你改了一下你看看。

是的,错了,谢谢!!!
回复 使用道具 举报
coqns 发表于 2012-11-28 23:37
我把你的代码截图,标注,告诉你分别哪几个地方错了

哦,是,我错了,谢谢。
回复 使用道具 举报
宫明星 发表于 2012-11-28 21:29
你的算法是错的,会变成死循环,我给你改了一下你看看。

是,谢谢了!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马