前景提要:很早以前,在知乎上,有人问了这么个问题:二分查找有几种写法?它们的区别是什么?
问题链接:https://www.zhihu.com/question/36132386
这个问题的回答者中赞最多的人也是小编昔日的ACM队友LightGHLi,那么小编先从队友LightGHLi的回答中开始讲起:
首先是说到二分的写法种类,LightGHLi的分析是这样的:
中值的取值方法有:向上取整,向下取整 (2种)
二分的区间有:闭区间,左闭右开区间,左开右闭区间,开区间 (4种)
问题类型有:
对于不下降序列a,求最小的i,使得a[i] = key
对于不下降序列a,求最大的i,使得a[i] = key
对于不下降序列a,求最小的i,使得a[i] > key
对于不下降序列a,求最大的i,使得a[i] < key
对于不上升序列a,求最小的i,使得a[i] = key
对于不上升序列a,求最大的i,使得a[i] = key
对于不上升序列a,求最小的i,使得a[i] < key
对于不上升序列a,求最大的i,使得a[i] > key (8种)
所以分析下来总共的写法有2 x 4 x 8 = 64种。