免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: 术士
打印 上一主题 下一主题

[算法] 二分查找的通用实现 [复制链接]

论坛徽章:
1
丑牛
日期:2013-09-29 19:04:50
11 [报告]
发表于 2013-09-30 18:07 |只看该作者
虽然C++ 的STL库实现了大部分算法, 但是还是要学习算法!

论坛徽章:
3
15-16赛季CBA联赛之山东
日期:2016-10-30 08:47:3015-16赛季CBA联赛之佛山
日期:2016-12-17 00:06:31CU十四周年纪念徽章
日期:2017-12-03 01:04:02
12 [报告]
发表于 2013-09-30 19:23 |只看该作者

挺好的。
LZ 发个代码而已, 至于开喷么。

bsearch 什么的是有, 不过自己随手写一个的话有问题么?。。。

论坛徽章:
0
13 [报告]
发表于 2013-10-01 12:44 |只看该作者
回复 7# yulihua49


不知道比较算法是可以自己指定的么。
std::lower_bound和std::upper_bound被你吃了?

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
14 [报告]
发表于 2013-10-01 16:28 |只看该作者
不是喷楼主,我扫描了一下代码,就感觉有bug。
然后再看下说明,果然
/*  Desc     : less the frst element, return 1                                */
/*             more than the last element return arraylen - 1                 */
/*             equal the element return index of element in array             */
/*             more than the index element and less than the index + 1 element*/
/*                                      return index + 1                      */

试问,当返回1时,意思是
  “小于第0个元素”
还是
  “等于第1个元素”
呢?

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
15 [报告]
发表于 2013-10-01 20:55 |只看该作者
本帖最后由 ntwarren 于 2013-10-02 14:29 编辑

我也不是喷楼主,但是你确定你这代码是经过测试的吗?
不说其它的,就拿第一个参数的类型是void *pArray[]显然是无法满足通用的标准的
就int a[]型的数组都传不过去。

论坛徽章:
0
16 [报告]
发表于 2013-10-02 04:02 |只看该作者
本帖最后由 giantchen 于 2013-10-02 08:54 编辑

回复 1# 术士


    你的算法是错的,找不到数组的最后一个元素,会死循环。比如说在 { 1, 2, 3, } 里找 3。

论坛徽章:
15
射手座
日期:2014-11-29 19:22:4915-16赛季CBA联赛之青岛
日期:2017-11-17 13:20:09黑曼巴
日期:2017-07-13 19:13:4715-16赛季CBA联赛之四川
日期:2017-02-07 21:08:572015年亚冠纪念徽章
日期:2015-11-06 12:31:58每日论坛发贴之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-07-12 22:20:002015亚冠之浦和红钻
日期:2015-07-08 10:10:132015亚冠之大阪钢巴
日期:2015-06-29 11:21:122015亚冠之广州恒大
日期:2015-05-22 21:55:412015年亚洲杯之伊朗
日期:2015-04-10 16:28:25
17 [报告]
发表于 2013-10-06 10:37 |只看该作者
本帖最后由 yulihua49 于 2013-10-06 10:41 编辑
幻の上帝 发表于 2013-10-01 12:44
回复 7# yulihua49

比较函数自己指定,
仿造STL而已。
因为要在C中使用。

另外4个函数:
bsearch_GT()
bsearch_GTEQ()
bserch_LT()
bserch_LTEQ()

没人提供,需要通过low……和up_间接实现,需要一个高效的实现,所以。。。。。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP