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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 不想飞不到 中级黑马   /  2014-8-21 11:15  /  4048 人查看  /  10 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

5黑马币
        public static int halfSearch2(List<String> list,String key,Comparator<String> cmp)//添加了比较器参数,使方法具备比较性(对象元素可能本来没有比较性)
        {
                int max,min,mid;
                max = list.size()-1;
                min = 0;

                while(min<=max)
                {
                        mid = (max+min)>>1;//  /2;

                        String str = list.get(mid);

                        int num = cmp.compare(str,key);//比较器,扩展了二分查找的比较范围
                        if(num>0)
                                max = mid -1;
                        else if(num<0)
                                min = mid + 1;
                        else
                                return mid;
                }
                return -min-1;
        }
class StrLenComparator implements Comparator<String>
{
        public int compare(String s1,String s2)
        {
                if(s1.length()>s2.length())
                        return 1;
                if(s1.length()<s2.length())
                        return -1;
                return s1.compareTo(s2);
        }
}

老毕的折半查
如果搜索键包含在列表中,则返回搜索键的索引;否则返回 (-(插入点) - 1)。插入点 被定义为将键插入列表的那一点:即第一个大于此键的元素索引;如果列表中的所有元素都小于指定的键,则为list.size()。注意,这保证了当且仅当此键被找到时,返回的值将 >= 0。
为什插入点等于min?

最佳答案

查看完整内容

看一下插入排序的原理就知道了。插入点位于min和max之间,如果min大于或等于了max,则表示所有元素都折半了,仍未找到和搜索键相同的值。此时min的位置就是插入点位置。

10 个回复

倒序浏览
看一下插入排序的原理就知道了。插入点位于min和max之间,如果min大于或等于了max,则表示所有元素都折半了,仍未找到和搜索键相同的值。此时min的位置就是插入点位置。
回复 使用道具 举报
突然灵光一闪,哈哈哈
回复 使用道具 举报
二分查找的原理就是在一个已经排好序的集合或者数组中,获取中间的元素的跟要查找的元素进行对比。如果min>max的时候,就代表该元素都找不到,但是可以确认的是,这个值一定大于min,所以这个插入点等于min的位置。
回复 使用道具 举报
min就是查找范围的最小边界,折半查找的核心就是不断的缩短边界,如果大于min则向着增大的方向来缩短边界,否则向着减小的方向来缩短边界。核心思想,减小查找的范围,需要注意的是折半查找必须是排过序的才可以。
回复 使用道具 举报
额,不错啊
回复 使用道具 举报
看看。。。
回复 使用道具 举报
建议再仔细看下视频 个人感觉 没有其他人可以比毕老师讲解的更清楚了!加上画图!很容易理解的!
回复 使用道具 举报
顶一个,感觉楼上回答的不错
回复 使用道具 举报
继续学习~
回复 使用道具 举报
我也是,老毕的视频看3遍就很牛逼了,这些问题都会了。。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马