binary search algorithm java implementation examples
Цей підручник пояснить двійковий пошук та рекурсивний двійковий пошук на Java, а також приклади алгоритму, реалізації та двійкового коду пошуку Java:
Двійковий пошук на Java - це техніка, яка використовується для пошуку цільового значення або ключа в колекції. Це техніка, яка використовує техніку «розділи і завоюй» для пошуку ключа.
Колекцію, до якої слід застосовувати двійковий пошук для пошуку ключа, потрібно сортувати за зростанням.
Зазвичай більшість мов програмування підтримують лінійний пошук, двійковий пошук та хешування, які використовуються для пошуку даних у колекції. Хешування ми дізнаємось у наступних підручниках.
=> Завітайте сюди, щоб вивчити Java з нуля.
Що ви дізнаєтесь:
Двійковий пошук на Java
Лінійний пошук - основний прийом. У цій техніці масив проходить послідовно, і кожен елемент порівнюється з ключем, поки ключ не буде знайдений або не буде досягнутий кінець масиву.
Лінійний пошук рідко використовується в практичних програмах. Бінарний пошук є найбільш часто використовуваною технікою, оскільки він набагато швидший, ніж лінійний пошук.
Java пропонує три способи двійкового пошуку:
10 найкращих аніме-сайтів англійська даб
- Використання ітераційного підходу
- Використання рекурсивного підходу
- Використання методу Arrays.binarySearch ().
У цьому посібнику ми реалізуємо та обговоримо всі ці 3 методи.
Алгоритм двійкового пошуку в Java
У двійковому методі пошуку колекція багаторазово ділиться на половину, а ключовий елемент шукається в лівій або правій половині колекції, залежно від того, менший або менший ключ, ніж середній елемент колекції.
Простий алгоритм двійкового пошуку такий:
- Обчислити середній елемент колекції.
- Порівняйте ключові елементи з елементом mid.
- Якщо ключ = середній елемент, тоді ми повертаємо позицію середнього індексу для знайденого ключа.
- Інакше Якщо ключ> середній елемент, то ключ лежить у правій половині колекції. Таким чином, повторіть кроки 1-3 в нижній (правій) половині колекції.
- Інший ключ
Як видно з наведених вище кроків, при двійковому пошуку половина елементів у колекції ігнорується відразу після першого порівняння.
Зверніть увагу, що така сама послідовність кроків виконується для ітеративного, а також рекурсивного двійкового пошуку.
Проілюструємо алгоритм двійкового пошуку на прикладі.
Наприклад, візьмемо наступний відсортований масив з 10 елементів.
Давайте обчислимо середнє розташування масиву.
Середина = 0 + 9/2 = 4
# 1) Ключ = 21
Спочатку ми порівняємо значення ключа з елементом (mid) і виявимо, що значення елемента в mid = 21.
Таким чином, ми знаходимо, що ключ = (середина). Отже, ключ знаходиться в позиції 4 масиву.
# 2) Ключ = 25
Спочатку ми порівнюємо ключове значення із середнім. Як (21<25), we will directly search for the key in the upper half of the array.
Тепер знову ми знайдемо середину для верхньої половини масиву.
Середина = 4 + 9/2 = 6
Значення в місці (середина) = 25
Тепер ми порівнюємо ключовий елемент із середнім елементом. Отже (25 == 25), отже, ми знайшли ключ у місці (середина) = 6.
Таким чином ми неодноразово ділимо масив і, порівнюючи ключовий елемент із середнім, вирішуємо, в якій половині шукати ключ. Бінарний пошук є більш ефективним з точки зору часу та правильності, а також набагато швидший.
Реалізація двійкового пошуку Java
Використовуючи вищезазначений алгоритм, давайте реалізуємо програму двійкового пошуку на Java, використовуючи ітераційний підхід. У цій програмі ми беремо приклад масиву та виконуємо двійковий пошук цього масиву.
import java.util.*; class Main{ public static void main(String args()){ int numArray() = {5,10,15,20,25,30,35}; System.out.println('The input array: ' + Arrays.toString(numArray)); //key to be searched int key = 20; System.out.println('
Key to be searched=' + key); //set first to first index int first = 0; //set last to last elements in array int last=numArray.length-1; //calculate mid of the array int mid = (first + last)/2; //while first and last do not overlap while( first <= last ){ //if the mid < key, then key to be searched is in the first half of array if ( numArray(mid) last ){ System.out.println('Element is not found!'); } } }
Вихід:
Вхідний масив: (5, 10, 15, 20, 25, 30, 35)
Ключ для пошуку = 20
Елемент знаходиться в індексі: 3
інструменти, необхідні для веб-розробки
Наведена програма показує ітераційний підхід двійкового пошуку. Спочатку оголошується масив, потім визначається ключ для пошуку.
Після обчислення середини масиву ключ порівнюється з елементом mid. Потім, залежно від того, чи є ключ менше або більше, ніж ключ, ключ шукається відповідно в нижній або верхній половині масиву.
Рекурсивний двійковий пошук на Java
Ви також можете виконати двійковий пошук за допомогою техніки рекурсії. Тут двійковий метод пошуку викликається рекурсивно, доки ключ не буде знайдений або весь список не буде вичерпаний.
Програма, що реалізує рекурсивний двійковий пошук, подана нижче:
import java.util.*; class Main{ //recursive method for binary search public static int binary_Search(int intArray(), int low, int high, int key){ //if array is in order then perform binary search on the array if (high>=low){ //calculate mid int mid = low + (high - low)/2; //if key =intArray(mid) return mid if (intArray(mid) == key){ return mid; } //if intArray(mid) > key then key is in left half of array if (intArray(mid) > key){ return binary_Search(intArray, low, mid-1, key);//recursively search for key }else //key is in right half of the array { return binary_Search(intArray, mid+1, high, key);//recursively search for key } } return -1; } public static void main(String args()){ //define array and key int intArray() = {1,11,21,31,41,51,61,71,81,91}; System.out.println('Input List: ' + Arrays.toString(intArray)); int key = 31; System.out.println('
The key to be searched:' + key); int high=intArray.length-1; //call binary search method int result = binary_Search(intArray,0,high,key); //print the result if (result == -1) System.out.println('
Key not found in given list!'); else System.out.println('
Key is found at location: '+result + ' in the list'); } }
Вихід:
Список входів: (1, 11, 21, 31, 41, 51, 61, 71, 81, 91
Ключ для пошуку:
Ключ знаходиться в адресі: 3 у списку
Використання методу Arrays.binarySearch ().
Клас Arrays у Java забезпечує метод ‘binarySearch ()’, який виконує двійковий пошук по даному масиву. Цей метод приймає масив і ключ для пошуку як аргументи і повертає позицію ключа в масиві. Якщо ключа не знайдено, тоді метод повертає -1.
Запитання щодо інтерв’ю на сервері sql для досвідчених професіоналів
У наведеному нижче прикладі реалізований метод Arrays.binarySearch ().
import java.util.Arrays; class Main{ public static void main(String args()){ //define an array int intArray() = {10,20,30,40,50,60,70,80,90}; System.out.println('The input Array : ' + Arrays.toString(intArray)); //define the key to be searched int key = 50; System.out.println('
The key to be searched:' + key); //call binarySearch method on the given array with key to be searched int result = Arrays.binarySearch(intArray,key); //print the return result if (result <0) System.out.println('
Key is not found in the array!'); else System.out.println('
Key is found at index: '+result + ' in the array.'); } }
Вихід:
Вхідний масив: (10, 20, 30, 40, 50, 60, 70, 80, 90)
Ключ для пошуку: 50
Ключ знаходиться в індексі: 4 у масиві.
Часті запитання
Q # 1) Як ви пишете двійковий пошук?
Відповідь: Двійковий пошук зазвичай виконується поділом масиву на половинки. Якщо ключ, який потрібно шукати, перевищує середній елемент, то верхню половину масиву шукають шляхом подальшого поділу та пошуку підмасиву, поки ключ не буде знайдений.
Подібним чином, якщо ключ менше середнього елемента, тоді ключ шукається в нижній половині масиву.
Q # 2) Де використовується двійковий пошук?
Відповідь: Бінарний пошук в основному використовується для пошуку відсортованих даних у програмних додатках, особливо коли обсяг пам'яті є компактним та обмеженим.
Q # 3) Що таке велике O двійкового пошуку?
Відповідь: Складність часу двійкового пошуку становить O (logn), де n - кількість елементів у масиві. Складність простору двійкового пошуку дорівнює O (1).
Q # 4) Чи є двійковий пошук рекурсивним?
Відповідь: Так. Оскільки двійковий пошук є прикладом стратегії «поділи і владай», і його можна реалізувати за допомогою рекурсії. Ми можемо розділити масив на половинки і викликати той самий метод, щоб виконувати двійковий пошук знову і знову.
Q # 5) Чому це називається двійковим пошуком?
Відповідь: Алгоритм двійкового пошуку використовує стратегію «поділи і переможи», яка неодноразово розрізає масив на половину або дві частини. Таким чином, він називається двійковим пошуком.
Висновок
Бінарний пошук - це часто використовувана техніка пошуку в Java. Вимога для двійкового пошуку, що здійснюється, полягає в тому, що дані слід сортувати за зростанням.
Двійковий пошук може бути реалізований як за допомогою ітераційного, так і рекурсивного підходу. Клас масивів у Java також забезпечує метод «binarySearch», який виконує двійковий пошук по масиву.
У наступних підручниках ми розглянемо різні методи сортування в Java.
=> Зверніть увагу на прості навчальні серії Java тут.
Рекомендована література
- Сортування виділення в Java - Алгоритм сортування виділення та приклади
- Сортування вставки на Java - Алгоритм сортування вставки та приклади
- Бінарне дерево пошуку C ++: Впровадження BST та операції з прикладами
- Інтерфейс Java та підручник з абстрактних класів із прикладами
- Підручник JAVA для початківців: 100+ практичних навчальних посібників Java
- Сортування бульбашок на Java - алгоритми сортування Java та приклади коду
- Підручник із рядків Java | Рядові методи Java на прикладах
- Що таке Java Java | Підручник з Java-класу з прикладами