算法系列<二分查找>

二分查找又称折半查找,是针对有序顺序表的查找,前提:数据是顺序存储的,已经按照关键词进行升序排序。查找成功返回索引值,查找不成功返回-1。

下面用java来实现二分查找算法:

/**
     * 二分查找:针对已排好序的序列,查找成功返回所在位置的索引值,查找不成功返回-1
     * 查找的最好时间复杂度:O(1),最坏时间复杂度O(logN),平均时间复杂度:O(logN)
     * 测试case:
     * case1:{1} 查找1
     * case2:{1} 查找2
     * case3:{} 查找1
     * case4:{1,2,3} 查找2
     * case5:{1,2,3} 查找1
     * case6:{1,2,3} 查找3
     * case7:{1,2,3} 查找8
     * case8:{4,5,6} 查找1
     * @param table  在table数组里面查找,table数组中的数据是按照从小到大排序的,有序顺序表
     * @param low    查找下界
     * @param high   查找上界
     * @param value  要查找的值
     * @return
     */
    public int binarySearch(int[] table,int low,int high,int value){

        if(table.length>0&&low>=0&&low<table.length&&high>=0&&high<table.length&&low<=high) {
            if (low == high) {
                if (value == table[low]) {
                    return low;
                } else {
                    return -1;
                }
            } else {
                int mid = (low + high) / 2;
                if (value == table[mid]) {
                    return mid;
                } else if (value > table[mid]) {
                    return binarySearch(table, mid + 1, high, value);
                } else {
                    return binarySearch(table, low, mid - 1, value);
                }
            }
        }else{
            return -1;
        }
    }

猜你喜欢

转载自www.cnblogs.com/zhaijing/p/9774576.html
今日推荐