美文网首页
二分查找的循环写法与递归写法

二分查找的循环写法与递归写法

作者: 好学人 | 来源:发表于2020-07-24 10:12 被阅读0次

    二分查找

    二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。但二分查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列。

    适用范围:有序列表

    时间复杂度:O(logn)

    循环写法

    /**
     * 二分查找的循环写法(升序列表)
     */
    public int binarySearch(int[] array, int target) {
        int left = 0;
        int right = array.length - 1;
        while (left <= right) { // 在候选区有效时循环查找
            int middle = (left + right) / 2;
            if (array[middle] == target) {
                return middle; // 找到目标元素
            } else if (array[middle] > target) {
                // 在左侧区域查找
                left = left;
                right = middle - 1;
            } else {
                // 在右侧区域查看
                left = middle + 1;
                right = right;
            }
        }
        return -1; // 未找到目标元素
    }
    

    递归写法

    /**
     * 二分查找的递归写法(升序列表)
     */
    public int binarySearch(int[] array, int target, int left, int right) {
        if (left > right) {
            return -1; // 未找到目标元素
        }
        int middle = (left + right) / 2;
        if (array[middle] == target) {
            return middle; // 找到目标元素
        } else if (array[middle] > target) {
            return binarySearch(array, target, left, middle - 1); // 在左侧区域递归查找
        } else {
            return binarySearch(array, target, middle + 1, right); // 在右侧区域递归查找
        }
    }
    

    相关文章

      网友评论

          本文标题:二分查找的循环写法与递归写法

          本文链接:https://www.haomeiwen.com/subject/gdadlktx.html