首頁常見問題正文

怎樣用java實(shí)現(xiàn)遞歸二分查詢?

更新時(shí)間:2024-03-08 來源:黑馬程序員 瀏覽量:

IT培訓(xùn)班

  遞歸二分查找是一種經(jīng)典的查找算法,用于在有序數(shù)組中查找特定元素的位置。下面是用Java實(shí)現(xiàn)遞歸二分查找的詳細(xì)說明:

public class BinarySearch {

    // 遞歸二分查找方法
    public static int binarySearch(int[] arr, int target) {
        return binarySearch(arr, target, 0, arr.length - 1);
    }

    // 輔助遞歸方法
    private static int binarySearch(int[] arr, int target, int low, int high) {
        // 當(dāng)low大于high時(shí),說明整個(gè)數(shù)組已經(jīng)搜索完畢,但未找到目標(biāo)元素
        if (low > high) {
            return -1;
        }

        // 計(jì)算中間元素的索引
        int mid = low + (high - low) / 2;

        // 如果中間元素等于目標(biāo)值,則返回該元素的索引
        if (arr[mid] == target) {
            return mid;
        }
        // 如果中間元素大于目標(biāo)值,則在左半部分繼續(xù)查找
        else if (arr[mid] > target) {
            return binarySearch(arr, target, low, mid - 1);
        }
        // 如果中間元素小于目標(biāo)值,則在右半部分繼續(xù)查找
        else {
            return binarySearch(arr, target, mid + 1, high);
        }
    }

    public static void main(String[] args) {
        int[] arr = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
        int target = 6;
        int result = binarySearch(arr, target);
        if (result != -1) {
            System.out.println("目標(biāo)元素 " + target + " 的索引為: " + result);
        } else {
            System.out.println("目標(biāo)元素 " + target + " 不存在于數(shù)組中。");
        }
    }
}

  在這個(gè)實(shí)現(xiàn)中,我們有兩個(gè)方法:

  1.binarySearch(int[] arr, int target):

  這個(gè)方法是公開的二分查找方法,它調(diào)用了輔助遞歸方法,并傳入了數(shù)組、目標(biāo)值以及數(shù)組的起始和結(jié)束索引。

  2.binarySearch(int[] arr, int target, int low, int high):

  這個(gè)方法是私有的輔助遞歸方法。它接受一個(gè)數(shù)組、目標(biāo)值以及搜索范圍的起始和結(jié)束索引。在每一次遞歸調(diào)用中,它計(jì)算中間元素的索引,然后與目標(biāo)值進(jìn)行比較。如果找到目標(biāo)值,則返回其索引;否則,根據(jù)目標(biāo)值與中間元素的大小關(guān)系,遞歸地在左半部分或右半部分繼續(xù)查找。

  在main方法中,我們展示了如何使用這個(gè)二分查找算法。我們聲明了一個(gè)有序數(shù)組arr,并指定了目標(biāo)值 target,然后調(diào)用binarySearch方法來搜索目標(biāo)值在數(shù)組中的位置。最后,根據(jù)返回的結(jié)果,輸出相應(yīng)的信息。

分享到:
在線咨詢 我要報(bào)名
和我們?cè)诰€交談!