递归二进制搜索二维数组

时间:2018-01-16 07:53:50

标签: arrays search binary 2d

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

这是我到目前为止所做的:

    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));
}

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

1 个答案:

答案 0 :(得分:0)

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;
    }
}