高效的二分查找算法,为什么java中"mid = low + (high - low)>>1"写不行?求高手解答

xiaojiang0805 2013-07-30 11:49:28
package com.xiaojiang.search;

public class BinarySearch {

public static void main(String[] args) {
int pos;
int[] a = new int[100];
for (int i = 0; i < a.length; i++) {
a[i] = i;
System.out.print(i+" ");
}
//BinarySearch bs = new BinarySearch();
pos = binary_search(a, 18);
System.out.println("\nthe position is :"+pos);
}

// 二分查找排序
public static int binary_search(int[] a, int x) {
int low, high, mid;
low = 0;
high = a.length - 1;
while (low <= high) {
mid = low + (high - low)/2;//疑问是这地方为什么不能用>>1
if (x < a[mid]) {
high = mid - 1;
} else if (x > a[mid]) {
low = mid + 1;
} else {
return mid;
}
}

return -1;
}

}


要毕业找工作了,今天实现了一下二分查找算法,想高效地实现,不知道为什么mid = low + (high - low)>>1写一直通不过,程序运行一直不出结果,cpu呼呼的响,估计是死循环了,但是mid = low + (high - low)/2写就可以了,求高手解答一下为什么? 疑惑中……
...全文
2875 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaojiang0805 2013-08-01
  • 打赏
  • 举报
回复
引用 1 楼 AA5279AA 的回复:
mid = low + (high - low)/2;//疑问是这地方为什么不能用>>1 如果想使用移位运算,还是得先知道使用的优先度的 既然是死循环,那么就是可以运算,只不过运算出来的结果出错,那么你其实就应该输出结果看结果,然后就知道原因了 mid = low + (high - low)>>1改成 mid = low + ((high - low)>>1)
是的,我虽然已经查出来了,还是非常感谢您,的确,如何解决问题是最重要的
小丑哥_V5 2013-07-31
  • 打赏
  • 举报
回复
zk3389 2013-07-31
  • 打赏
  • 举报
回复
System.out.println(12+11>>1);
		System.out.println(12+(11>>1));
		System.out.println((12+11)>>1);
		System.out.println(23>>1);
失落夏天 2013-07-31
  • 打赏
  • 举报
回复
mid = low + (high - low)/2;//疑问是这地方为什么不能用>>1 如果想使用移位运算,还是得先知道使用的优先度的 既然是死循环,那么就是可以运算,只不过运算出来的结果出错,那么你其实就应该输出结果看结果,然后就知道原因了 mid = low + (high - low)>>1改成 mid = low + ((high - low)>>1)

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧