二分算法
二分算法分为浮点数二分和整数二分,整数二分相对于浮点数二分来讲更复杂,需要考虑边界问题等
二分思想
二分算法的思想是就一段有序序列来讲,想要查找其中某一个数,可以先找到位于序列中点的数,如果目标值小等于中点值,且序列是单调递增的,那么目标值一定在中点左侧,这样再用同样的方式对左侧区间进行二分,如此查找,最后就会找到要找的数字
整数二分
整数二分思想上很好理解,就是将有序的序列从中间分开,判断目标值在哪半边,再继续二分那段序列就可以
下面给出整数二分的一个例子,包括了整数二分的两种写法
1 |
|
这里之所以存在两种写法,主要区别在于求中点 mid 的值时,如果边界值采取不当的话,整数二分极有可能产生死循环导致程序崩溃,所以须在求 mid 时进行向下取整,即 mid = (l + r + 1) / 2
浮点数二分
在理解了整数二分的基础上,理解浮点数二分就变得十分简单了,因为浮点数二分不会涉及到边界问题,所以在确定边界值上十分简单,下面是用浮点数二分的思想实现的开平方问题
1 |
|