Мне нужно использовать бинарный поиск, чтобы найти 45.3 в массиве. Вот что я до сих пор.
public class Bsearch {
public static final int NOT_FOUND = -1;
public static int binarySearch(int[] a, int x) {
int low = 0;
int high = a.length - 1;
int mid;
while (low <= high) {
mid = (low + high) / 2;
if (a[mid].compareTo(x) < 0)
low = mid + 1;
else if (a[mid].compareTo(x) > 0)
high = mid - 1;
else
return mid;
}
return NOT_FOUND;
}
public static void main(String[] args) {
int SIZE = 6;
int[] a = new Integer[SIZE] = { 10, -3, 5, 24, 45.3, 10.5 };
System.out.println("45.3 Found" + binarySearch(a, 45.3));
}
}
Все мои ошибки, похоже, вытекают из этого area-
int [] a = new Integer [ SIZE ]={ 10,-3,5,24,45.3,10.5 };
System.out.println("45.3 Found" +binarySearch(a, 45.3));
Все это ново для меня, так жаль очевидных ошибок.
Для двоичного поиска Data Array следует сортировать и сортировать в правильном порядке, но массив, который вы передаете в binarySearch (int [] a, int x), не сортируется, поэтому сначала сортируйте массив, а затем примените к нему двоичный поиск. Также проверьте свою логику для бинарного поиска, вы сравниваете средний элемент с 0, его следует сравнить с элементом, который нужно искать (ключ)
while(high >= low) {
int middle = (low + high) / 2;
if(data[middle] == key) {
return true;
}
if(data[middle] < key) {
low = middle + 1;
}
if(data[middle] > key) {
high = middle - 1;
}
}
Проблема действительно в этой строке:
int[] a = new Integer[SIZE] = { 10, -3, 5, 24, 45.3, 10.5 };
Существует ряд проблем:
Integer[]
int[]
переменной int[]
. Измените его на new int[]
new
оператором вы либо указываете размер массива, либо содержимое.Итак, либо:
int[] a = new int[SIZE];
Или
int[] a = new int[] { 10, -3, 5, 24, 45, 10 };
Оба будут работать.
Вы должны решить, хотите ли вы использовать примитивные типы (int
) оберток класса (Integer
) и придерживаться его.
Ваш метод binarySearch
принимает int[]
как параметр, но вы используете методы (compareTo
), которые доступны только для Integer
.
Но на самом деле сравнение намного проще с примитивными типами:
if (a[mid] < x)
low = mid + 1;
else if (a[mid] > x)
high = mid - 1;
else
return mid;