对于二分查找中的中点值选取
mid = (high + low) / 2;
更好的替换方式为:
mid = low + (high - low) / 2;
因为前一种方式容易造成数据溢出,后一种则不会。
另外也可以用位运算的方式进行运算,看起来会高级一点。。。
// 只适用于正数
mid = (low >> 1) + (high >> 1) + (low & 1 & high);
右移相当于除二,如果两个数都是奇数的话还要加上一个1,注意位运算的优先级很低,要加括号。
负数的话右移也是向下取整,但负数的向下取整取到的是绝对值较大的数,因此不适用(还没想到都适用的位运算方法)。