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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 骆龙 中级黑马   /  2012-2-26 21:25  /  2698 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  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 的结果。。。。

10 个回复

正序浏览
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;

        }

}
这是折半查找的一个局限条件,必须是有序数组。

评分

参与人数 1技术分 +1 收起 理由
老罗 + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
本帖最后由 葛尧 于 2012-2-27 14:34 编辑

上面说的不错啊
回复 使用道具 举报
杨盼 中级黑马 2012-2-26 22:06:13
9#
不客气,大家一起加油吧
回复 使用道具 举报
骆龙 中级黑马 2012-2-26 21:55:09
8#
蓝色火焰 发表于 2012-2-26 21:39
你在比较min和max之前先输出min和max就知道怎么回事了,你要实现折半查找首先要将数列按有序化(递增或递减) ...

知道为什么 非常感谢
回复 使用道具 举报
沈样 黑马帝 2012-2-26 21:53:46
7#
你这个是折半查找吧,第一步就错了,这个数组必须是有顺序的
回复 使用道具 举报
蓝色火焰 发表于 2012-2-26 21:39
你在比较min和max之前先输出min和max就知道怎么回事了,你要实现折半查找首先要将数列按有序化(递增或递减) ...

怎么跳不出来? 当 key=arr[mid] 时它就跳出来了,结束循环 return mid
回复 使用道具 举报
你看楼上,刚给你回复了
回复 使用道具 举报
感觉代码 没有问题啊啊~~却怎么也找不出结果错哪了  疯了要
回复 使用道具 举报
本帖最后由 蓝色火焰 于 2012-2-26 21:47 编辑

你在比较min和max之前先输出min和max就知道怎么回事了,你要实现折半查找首先要将数列按有序化(递增或递减)排列,才可以,不然你找的那一半永远找不到想要的,没找的那一半到有你想要的
回复 使用道具 举报
  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之前根本跳不出来,

评分

参与人数 1技术分 +1 收起 理由
老罗 + 1 赞一个!

查看全部评分

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