黑马程序员技术交流社区

标题: 关于集合框架工具中二分法原理的问题 [打印本页]

作者: 半夜雨半夜雨    时间: 2013-11-18 12:13
标题: 关于集合框架工具中二分法原理的问题

  1. public static int halfSearch2(List<String> list,String key,Comparator<String> cmp)
  2. {
  3. int max,min,mid;
  4. max = list.size()-1;
  5. min = 0;

  6. while(min<=max)
  7. {
  8. mid = (max+min)>>1;// /2;

  9. String str = list.get(mid);

  10. int num = cmp.compare(str,key);
  11. if(num>0)
  12. max = mid -1;
  13. else if(num<0)
  14. min = mid + 1;
  15. else
  16. return mid;
  17. }
  18. return -min-1;
复制代码
代码段如上,这个插入点为什么是min呢,不理解,求解答
作者: 零下五度的水    时间: 2013-11-18 18:30
那是个 mid 吧。。。middle中间
作者: 半夜雨半夜雨    时间: 2013-11-18 21:41
零下五度的水 发表于 2013-11-18 18:30
那是个 mid 吧。。。middle中间

{:soso_e136:}问题是真的是毕老大的代码,也没细说,纠结
作者: 何超    时间: 2013-11-18 21:53
是这样的啊···哪里有错了···
作者: 半夜雨半夜雨    时间: 2013-11-18 22:02
何超 发表于 2013-11-18 21:53
是这样的啊···哪里有错了···

不是错,而是不理解为什么是min
作者: hurryup    时间: 2013-11-18 22:14
嗯我想是这样的return -min-1,意思就是返回-1就是程序出错了。
作者: 侠客梦的懒猫    时间: 2013-11-18 22:39
return -min-1;分析开始min=0,由于return -min-1;在while()循环的外面,可以想到当while结束时,min=max了,-min-1就是一个负数,貌似就是表示程序结束吧
作者: FFF    时间: 2013-11-19 00:23
如果问题已经解决,请及时修改主题为“提问结束”。
修改主题的方法链接
http://bbs.itheima.com/thread-89313-1-1.html
如果没有解决,可能你的问题问得不够清楚。可以重新发问的哦~
作者: 半夜雨半夜雨    时间: 2013-11-19 11:05
hurryup 发表于 2013-11-18 22:14
嗯我想是这样的return -min-1,意思就是返回-1就是程序出错了。

retrun一个负数代表被比较的数大于比较数,返回(-插入点-1)
我问的是当key不是str中的元素是,插入位置为什么是min。
作者: 半夜雨半夜雨    时间: 2013-11-19 11:06
侠客梦的懒猫 发表于 2013-11-18 22:39
return -min-1;分析开始min=0,由于return -min-1;在while()循环的外面,可以想到当while结束时,min=max ...

retrun一个负数代表被比较的数大于比较数,返回(-插入点-1)
我问的是当key不是str中的元素是,插入位置为什么是min。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2