【问题标题】:Recursive Binary Search for a 2-Dimensional Array二维数组的递归二分搜索
【发布时间】:2018-06-24 21:00:22
【问题描述】:

我的任务是创建递归二维二进制搜索函数,给定一个排序的二维数组。 它必须与一维数组完全一样,原理相同: 将首先检查数组的中间(如果它是 3x3,将首先检查索引 1,1 并像往常一样从那里继续。 感谢帮助。 对我说的唯一线索是将其视为一维数组,而不是将其实际转换为一维数组。

这是我目前所拥有的:

    public static boolean binSearch(int[][] arr, int low, int high, int search) {
    if(low>high)
        return false;
    int avg=(low+high)/2;
    int i=(avg)/arr.length;
    int j=(avg)%arr[0].length;
    if(arr[i][j]==search)
        return true;
    if(arr[i][j]<search) 
        return binSearch(arr, avg+1, high, search);
    if(arr[i][j]>search)
        return binSearch(arr, low, avg-1, search);
    return false;
}
public static boolean binSearch(int[][] arr, int search) {
    return(binSearch(arr, 0, (arr.length*arr[0].length)-1, search));
}
public static void main(String[] args) {
    int[][] arr= {{1,2,3},
                  {4,5,6}}; 
    int search=4;
    System.out.println(binSearch(arr, search));
}

我觉得我很接近,但并不完全在那里。 非常感谢!

【问题讨论】:

    标签: arrays search binary 2d


    【解决方案1】:
    public static void main(String[] args) 
    {
        int numberToSearch = 4;
        int[][] matrix = {{1,2,3},
                         {4,5,6}}; 
        int matrixSize = matrix.length * matrix[0].length - 1;
    
       System.out.println(binSearch(matrix, 0, matrixSize, numberToSearch));
    }
    
    public static boolean binSearch(int[][] i_matrix, int i_low, int i_high, int i_numberToSearch)
    {
        if (i_low <= i_high)
        {
            int matrixWidth = i_matrix[0].length;
            int mid = (i_low + i_high) / 2;
            int currentCheckedNumber = i_matrix[mid / matrixWidth][mid % matrixWidth];
    
            if (currentCheckedNumber == i_numberToSearch)
            {
                return true;
            }
            else if (currentCheckedNumber < i_numberToSearch)
            {
                return binSearch(i_matrix, (mid + 1), i_high, i_numberToSearch);
            }
            else // if (currentCheckedNumber > i_numberToSearch)
            {
                return binSearch(i_matrix, i_low, (mid - 1), i_numberToSearch);
            }
        }
        else
        {
            return false;
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-05
      • 1970-01-01
      • 2014-02-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多