В настоящее время я изучаю двоичный поиск. Я читал пример кода из книги, но не показывает, как использовать бинарный поиск с двухмерными массивами, только с одномерными массивами. Я хотел изучить оба подхода, чтобы расширить свои знания по этой теме.Как использовать двоичный поиск с двумерным массивом?
Вот код, который был записан в книге (некоторые из них):
package Test;
import java.util.Scanner;
public class TestMain {
public static void main(String[]args){
int[]numbers = {1,2,3,4,5};
int numInput = getNumInput();
int result = binarySearch(numbers,numInput);
if(result == -1){
System.out.print("No Match Found!");
}else{
System.out.print("Match Found!");
}
}
public static int getNumInput(){
Scanner hold = new Scanner(System.in);
int num;
System.out.print("Enter number:");
num = hold.nextInt();
return num;
}
public static int binarySearch(int[]numbers,int numInput){
int first = 0;
int middle;
int last = numbers.length - 1;
int position = -1;
boolean found = false;
while(!found && first < numbers.length){
middle = (first + last)/2;
if(numbers[middle]==numInput){
found = true;
position = middle;
}else if(numbers[middle]>numInput){
last = middle - 1;
}else{
first = middle + 1;
}
}
return position;
}
}
А вот мой код пытается использовать два двумерный массив:
package Practice;
import java.util.Scanner;
public class Practice1Main {
public static void main(String[]args){
int[][]numbers = {{1,2},{3,4},{5,6}};
int numInput = getNumInput(numbers);
int result = binarySearch(numbers,numInput);
if(result == -1){
System.out.print("No Match Found!");
}else{
System.out.print("Match Found!");
}
}
public static int getNumInput(int[][]numbers){
Scanner hold = new Scanner(System.in);
int num;
System.out.print("Enter number:");
num = hold.nextInt();
return num;
}
public static int binarySearch(int[][]numbers,int numInput){
int first = 0;
int middle;
int last = 2;
int position = -1;
boolean found = false;
while(!found && first < numbers.length){
middle = (first + last)/2;
if(numbers[middle][first]==numInput){
found = true;
position = middle;
}else if(numbers[middle][first]>numInput){
last = middle - 1;
}else{
first = middle + 1;
}
}
return position;
}
}
Выход был способный искать от 1 до 3. Однако, когда вы вводите число 4, оно даст мне ошибку ArrayIndexOutOfBoundsException
.
Хотя я понимаю почти поток бинарного поиска из книги, я до сих пор не могу понять алгоритм с использованием двумерных массивов.