二分查找算法是比较简单的算法,在查找有序数组中的数据就有巨大的优势。接下来就具体谈谈二分法:
要查找的值为searchKey
1.这个方法一开始就设置了变量lowerBound和upperBound,分别指向数组的第一项和最后一个非空项,这样确定了查找范围。
2.然后在while循环中,声明一个下标curin,被设置为上面范围的中间值(curin = (lowerBound+upperBound)/2)(ps:得到的curin不会四舍五入,而是会舍弃余数);
3.如果当前curin所指向的值等于searchKey,这就查找成功了
如果当前curin所指向的值小于searchKey,则将curin+1赋值给lowerBound,而upperBound不变,再求当前范围的中间值curin
如果当前curin所指向的值大于searchKey,则将curin-1赋值给upperBound,而lowerBound不变,再求当前范围的中间值curin
如果当前lowerBound大于当前的upperBound,则证明查找失败
实现代码如下:
public int find(long searchKey){ int curIn; //中间值下标 int lowerBound=0; int upperBound=nElem-1; while(true){ curIn = (lowerBound+upperBound)/2; if (a[curIn]==searchKey) { return true; //查找成功 }else if (lowerBound>upperBound) { return false; //查找失败 }else { if (a[curIn]<searchKey) { lowerBound = curIn+1; }else { upperBound = curIn-1; } } } }