二分查找总结

今天上csdn,发现一篇关于二分查找算法的文章被置顶,回帖也相当热烈。我觉得算法总重要的还是要了解思想,至于编程技巧则是其次。 二分查找在计算中算法中的重要性不言而喻,许多变形的算法都是基于此演变的,比如二分查找树等。 所以此算法程序我也打算总结一下。 当然经典的算法讨论莫过于Jon Bentley 的编程珠玑了。

1, 可能溢出的算法

int buggyBinarySearch(int[] a, int target) {
int low = 0;
int high = a.length - 1;
while (low <= high) {

   int mid = (low + high) / 2;        ///此处有个bug,可能会溢出,所以接下来的两个程序可以解决这个问题
   int midVal = a[mid];
   if (midVal < target)
      low = mid + 1;
   else if (midVal > target)
      high = mid - 1;
   else
      return mid;
}
return -1;
}

 

2,一般二分算法

int BinarySearch(int[] a, int target) {
int low = 0;
int high = a.length - 1;
while (low <= high) {

   int mid = low + (high-low)>>1
   int midVal = a[mid];
   if (midVal < target)
      low = mid + 1;
   else if (midVal > target)
      high = mid - 1;
   else
      return mid;
}
return -1;
}

 

3。 采用无符号左移

int BinarySearch(int[] a, int target) {
int low = 0;
int high = a.length - 1;
while (low <= high) {

   int mid = (high+low)>>>1
   int midVal = a[mid];
   if (midVal < target)
      low = mid + 1;
   else if (midVal > target)
      high = mid - 1;
   else
      return mid;
}
return -1;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值