使用递归进行二进制搜索

时间:2015-11-08 21:08:05

标签: java arrays sorting recursion

    public static int binarySearch(double[] arr, int low, int high, double inq){
    int mid = (low + high)/2;
    if(arr == null) return -1;
    if(low > high) return -1;
    if(arr[(int)inq] < arr[low])
    return -1;
    if(arr[(int)inq] > arr[high])
    return -1;
}

我想以递归方式搜索数组 arr 来查找 inq 的索引。我只有终止案例。不知道如何解决这个问题。

最初的问题是这个问题:

在数组切片arr[low:high]中搜索一个匹配项 inq。如果inq出现在arr中,则返回索引i arr[i] == inq。否则,返回-1。假设arr按递增顺序排序。

这些是某些案例的答案:

输入数组是table = {2,4,6,8,10,12,14}。

    在表[0:6]中索引0 中找到
  • 2 在表[0:6]中索引-1
  • 中找到
  • 3 在表[2:6]中索引-1
  • 中找到
  • 4
  • 12在表[2:5]的索引5
  • 中找到

我知道如何使用迭代来完成它,但我不熟悉递归方法。我对此表示感谢。

1 个答案:

答案 0 :(得分:2)

关键是通过将修改后的lowhigh传递到下一个递归调用来更新lowhigh来更新搜索范围。每次通话时,我们会根据[low, mid-1][mid+1, high]

之间的比较将搜索范围更新为inqarr[mid]

这将有效:

public static int binarySearch(double[] arr, int low, int high, double inq){
    int mid = (low + high)/2;
    if(arr == null || low > high) return -1;

    if(arr[mid] == inq) return mid;

    if(arr[mid] < inq) { // inq is in the upper half
        return binarySearch(arr, mid+1, high, inq);
    }
    if(arr[mid] > inq) { // inq is in the lower half
        return binarySearch(arr, low, mid-1, inq);
    }
}