更新時(shí)間:2024-03-08 來源:黑馬程序員 瀏覽量:
遞歸二分查找是一種經(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)的信息。