English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
В этом примере мы изучим реализацию алгоритма двоичного поиска в Java.
Прежде чем изучать реализацию двоичного поиска в Java, убедитесь, что вы понимаете принцип работы алгоритма двоичного поиска.
import java.util.Scanner; //Двоичный поиск в Java class Main { int binarySearch(int array[], int element, int low, int high) { //Повторять этот процесс, пока указатель high не станет равен указателю low while (low <= high) { //Получение индекса mid элемента int mid = low + (high - low) / 2; //Если элемент равен mid элементу if (array[mid] == element) возврат mid; //Если элемент меньше mid элемента //Только поиск слева от mid if (array[mid] < element) low = mid + 1; //Если элемент больше mid элемента //Только поиск справа от mid else high = mid - 1; } возврат -1; } public static void main(String args[]) { //Создание объекта класса Main Main obj = new Main(); //Создание отсортированного массива int[] array = {3, 4, 5, 6, 7, 8, 9}; int n = array.length; //Получение ввода от пользователя, элемент для поиска Scanner input = new Scanner(System.in); System.out.println("Введите элемент для поиска:"); //Элемент для поиска int element = input.nextInt(); input.close(); //Вызов метода двоичного поиска //Передача параметров: массив, элемент, индекс первого и последнего элементов int result = obj.binarySearch(array, element, 0, n - 1); if (result == -1) System.out.println("Не найдено"); else System.out.println("Найден элемент, в индексе" + result); } }
Вывод 1
Введите элемент для поиска: 6 Найден элемент, в индексе
Здесь мы уже использовалиКласс сканера JavaПолучаем ввод от пользователя. В зависимости от ввода пользователя, мы используем двоичный поиск для проверки наличия элемента в массиве.
Мы можем использовать рекурсивный вызов для выполнения той же задачи.
int binarySearch(int array[], int element, int low, int high) { if (high >= low) { int mid = low + (high - low) / 2; //проверка, является ли элемент mid искомым if (array[mid] == element) возврат mid; //поиск левой половины mid if (array[mid] > element) возврат binarySearch(array, element, low, mid - 1); //поиск правой половины mid возврат binarySearch(array, element, mid + 1, high); } возврат -1; }
В данном случае,该方法 binarySearch() будет вызываться до тех пор, пока не будет найден элемент или если условие if не сработает.