Использование бинарного поиска для поиска значения в массиве (Java)

1

Мне нужно использовать бинарный поиск, чтобы найти 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));

Все это ново для меня, так жаль очевидных ошибок.

  • 1
    какая ошибка? Пожалуйста, укажите ошибку
  • 2
    Зачем использовать поплавки в массиве Integer?
Показать ещё 2 комментария
Теги:
search
binary

2 ответа

1

Для двоичного поиска 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;
  }
}
1

Проблема действительно в этой строке:

int[] a = new Integer[SIZE] = { 10, -3, 5, 24, 45.3, 10.5 };

Существует ряд проблем:

  1. Вы не можете назначить Integer[] int[] переменной int[]. Измените его на new int[]
  2. Вы не можете поместить число с плавающей запятой в массив целых чисел; измените числа 45.3 и 10.5 на целые числа.
  3. У вас есть два варианта в Java: при создании нового массива с 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;
  • 0
    теперь это дает мне ошибки для частей .compareTo? Есть идеи?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню