算法 之 二分查找算法

二分查找算法是比较简单的算法,在查找有序数组中的数据就有巨大的优势。接下来就具体谈谈二分法:

要查找的值为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;
                }
            }
        }
    }

 

posted @ 2015-11-23 12:07  千个太阳在手中  阅读(289)  评论(0编辑  收藏  举报