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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 杨胜男 中级黑马   /  2014-6-8 11:44  /  847 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

/*
数组的查找操作。
折半查找
*/
class ArrayTest4
{
        public static void main(String[] args)
        {
                int[] arr = {2,4,5,7,8,19,32,45};
                int index=find(arr, 45);
                System.out.print("index="+index);
        }
       
        public static int find(int[] arr,int key)
        {
                int min=0, max=arr.length-1, mid;
                while (min<=max)//这里为什么要min<=max,写成min<max,运行结果就是-1?
                {
                        mid=(min+max)/2;

                        if(key>arr[mid])
                                min = mid+1;
                        else if(key<arr[mid])
                                max =mid-1;
                        else
                                return mid;
                }
                return -1;
        }
}

1 个回复

正序浏览
因为传入的数字正好是该集合的最大值, find方法返回的是mid值,mid等于最大值时,max和min都要等于最大值,
如果不判断min=max 的情况,那么是得不到该数组的最大值的,所以你的结果 会等于-1.

评分

参与人数 1技术分 +1 收起 理由
李小然 + 1

查看全部评分

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