黑马程序员技术交流社区
标题:
折半查找的min怎么看?
[打印本页]
作者:
不想飞不到
时间:
2014-8-21 11:15
标题:
折半查找的min怎么看?
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?
作者:
刘瑞
时间:
2014-8-21 11:15
看一下插入排序的原理就知道了。插入点位于min和max之间,如果min大于或等于了max,则表示所有元素都折半了,仍未找到和搜索键相同的值。此时min的位置就是插入点位置。
作者:
不想飞不到
时间:
2014-8-21 12:20
突然灵光一闪,哈哈哈
作者:
MVP
时间:
2014-8-21 12:59
二分查找的原理就是在一个已经排好序的集合或者数组中,获取中间的元素的跟要查找的元素进行对比。如果min>max的时候,就代表该元素都找不到,但是可以确认的是,这个值一定大于min,所以这个插入点等于min的位置。
作者:
静水流深2014
时间:
2014-8-21 18:49
min就是查找范围的最小边界,折半查找的核心就是不断的缩短边界,如果大于min则向着增大的方向来缩短边界,否则向着减小的方向来缩短边界。核心思想,减小查找的范围,需要注意的是折半查找必须是排过序的才可以。
作者:
逍遥客
时间:
2014-8-22 08:10
额,不错啊
作者:
inception
时间:
2014-8-23 20:06
看看。。。
作者:
奋发吧小白
时间:
2014-8-25 00:23
建议再仔细看下视频 个人感觉 没有其他人可以比毕老师讲解的更清楚了!加上画图!很容易理解的!
作者:
sxyglx2010
时间:
2014-9-6 18:28
顶一个,感觉楼上回答的不错
作者:
fouraa
时间:
2014-9-8 10:35
继续学习~
作者:
980344791
时间:
2014-10-10 20:03
我也是,老毕的视频看3遍就很牛逼了,这些问题都会了。。。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2