二分查找之如何选取中间值
1、 int mid = (right + left) / 2
在数学中这是最常用的求线段中点的方法,如果将其直接用到编程中是不行的,因为没有考虑编程中各个数据类型的存储空间大小(不同的的数据类型所对应的空间大小是不一样的——可以保证存储空间的有效利用)。如果在编程中采用该方法必须要保证数据的有效性,一般来说int类型为4字节共32位,所以一个int能够表示的数据的范围为: [−231, 231− 1],表示为十进制为:[-2147483648 ~ 2147483647]。如果int+int超出了int数据类型的范围则会出现“溢出”。从而导致“数据出错”。但是如果像python编程语言,会自动将所谓的“溢出型”整数数据转换成长整型变量。
2、 int mid = (right - left) / 2 + left
该方法可以有效的避免第一个公式出现的问题——溢出,但是其运算速度还有待改进。只要运行时间足够就可以使用该式子。
int mid = ((right - left) / 2) + left;
3、 int mid = ((right - left) >> 1) + left
该方法使用右移运算符>>,运算结果正好能对应一个整数的二分之一值,这就正好能代替数学上的除2运算,但是比除2运算要快。
右移一位相当于除2,右移n位相当于除以2^n。
int mid = ((right - left) >> 1) + left;