我的任务是创建递归的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));
}
我觉得我很亲近,但并不完全在那里。 非常感谢!
答案 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;
}
}