什么是二分?
我们首先来玩一个猜数游戏:我随便想一个1~100中的数字,
你的目标是以最少的次数猜到这个数字。
每次猜测后,我都会告诉你大了、小了或对了来验证结果。
有两种猜数方式:
第一种:假设你从1开始依次往上猜。
这种方式的风险极高,假如我想的数是1,那么只用猜一次;假如我想的数是99,则需要猜测99次才能猜对。
第二种:假设你从50开始折半猜。
1~100 猜50,小了。
50~100 猜75,大了。
50~75 猜62,大了。
50~62 猜56,对了!
这样每一次都取得当前可能区间的中间值,从而将余下的数排除一半。这种方法就叫做:二分法。
每一步的猜测都可以帮我们排除掉一半的错误结果,大大提高了查找答案的效率。
但是使用这个方法的首要前提是:需要查找的序列是有序排列的。
二分的实现
二分法最经典的写法应是如此:
在简单有序数组中查找指定元素
int binary_search(int low,int high,int key){
while(low <= high){
int mid = (low + high) /

文章介绍了二分法的概念,通过猜数游戏展示了二分法如何提高查找效率。接着,文章提供了二分法的经典实现,并分析了不同情况下的返回值。之后,通过洛谷上的两道编程题,解释了二分法在查找和优化答案时的应用,包括处理单调序列和解决砍树问题。文章强调了二分法在处理有序序列和特定范围查找时的优势。
最低0.47元/天 解锁文章
1070

被折叠的 条评论
为什么被折叠?



