剑指offer之二分查找

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/danielzhou888/article/details/83793634

@(算法)

二分查找

欢迎关注作者博客
简书传送门

思想:

  又叫折半查找,要求待查找的序列有序。每次取中间位置的值与待查关键字比较,如果中间位置的值比待查关键字大,则在前半部分循环这个查找的过程,如果中间位置的值比待查关键字小,则在后半部分循环这个查找的过程。直到查找到了为止,否则序列中没有待查的关键字。

代码:

/**
 * @program:
 * @description: 二分查找
 * @author: zhouzhixiang
 * @create: 2018-11-06 20:08
 */
public class BinSearch {

    /**
     * 二分查找普通实现
     * @param array
     * @param key
     * @return
     */
    public static int binSearch(int array[], int key){
        int mid;
        int start = 0;
        int end = array.length - 1;
        while (start < end) {
            mid = (end - start)/2 + start;
            if (array[mid] > key){
                end = mid - 1;
            } else if(array[mid] < key){
                start = mid + 1;
            } else {
                return mid;
            }
        }
        return -1;
    }

    /**
     * 二分查找递归实现
     * @param array
     * @param key
     * @return
     */
    public static int binSearch2(int array[], int key, int start, int end){
        int mid = (start + end) / 2;
        while (start < end) {
            if(array[mid] > key) return binSearch2(array,key,start,mid-1);
            else if (array[mid] < key) return binSearch2(array,key,mid+1,end);
            else return mid;
        }
        return -1;
    }

}

欢迎加入Java猿社区
扫码_搜索联合传播样式-标准色版.png

猜你喜欢

转载自blog.csdn.net/danielzhou888/article/details/83793634