Я кодирую поиск в обратном направлении в отсортированном двумерном массиве в Java, и происходят странные вещи.
Алгоритм должен найти первое вхождение данного элемента k
в массив (сначала строки, затем колонны). Затем он должен также показать, по какому индексу было найдено данное число.
Я написал итерационный алгоритм итеративно, и он работает, но после перекодирования его как рекурсивного - нет.
Для массива
10 10 10 10
10 20 20 30
20 20 20 40
И k: 20
Выводит, что k не может быть найдено в данном массиве.
Также - алгоритм должен иметь меньшую сложность чем O (n, m) ^ 3, так что любые другие советы алгоритма будут оценены.
Вот мой код:
static boolean RekPier(int tab[][], int i, int j, int m, int n, int k){
System.out.println(i + " " + j + " " + tab[i][j]);
if (tab[i][j] == k && i < m && j < n){
findex = i;
lindex = j;
return true;
}
else if((tab[i][j] > k || tab[i][n-1] < k) && (i < m && j < n)){
int i1 = i+1;
if(i1 == m) return false;
RekPier(tab, i1, 0, m, n, k);
}
else if (i < m && j < n){
int j1 = j+1;
if(j1 == n) return false;
RekPier(tab, i, j1, m, n, k);
}
return false;
}