码迷,mamicode.com
首页 > 其他好文 > 详细

bsearch的溢出问题

时间:2014-11-08 15:11:42      阅读:176      评论:0      收藏:0      [点我收藏+]

标签:blog   ar   java   sp   div   问题   log   bs   line   

在java中为了避免 low+high溢出,可以用无符号右移:正数高位补0,负数高位补1

int mid = (low + high) >>> 1;

如果是在c++中,那么需要先转换为unsigned的再移位

int a=100;
int b;
b=((unsigned int)a)>>1;

或者 int mid = low + ((high - low) / 2);

 

public static int binarySearch(int[] a, int target) {
 int low = 0;
 int high = a.length - 1;
   while (low <= high) {
     int mid = (low + high) >>> 1;
     int midVal = a[mid];
     if (midVal < target)
         low = mid + 1;
     else if (midVal > target)
         high = mid - 1;
     else
         return mid;
   }
   return -1;
 }

  

bsearch的溢出问题

标签:blog   ar   java   sp   div   问题   log   bs   line   

原文地址:http://www.cnblogs.com/juandx/p/4083391.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!