logo

Arrays.binarySearch() в Java з прикладами | Набір 1

Arrays.binarySearch() метод шукає вказане значення в заданому масиві заданого типу даних за допомогою алгоритму бінарного пошуку. Масив має бути відсортований за Arrays.sort() перед цим викликом. Якщо він не відсортований, результати не визначені. Якщо масив містить кілька елементів із зазначеним значенням, немає гарантії, який із них буде знайдено. Давайте пройдемося по наведеній нижче ілюстрації таким чином.

Ілюстрація:



Searching for 35 in byteArr[] = {10,20,15,22,35} will give result as 4 as it is the index of 35 Searching for g in charArr[] = {'g','p','q','c','i'} will give result as 0 as it is the index of 'g' Searching for 22 in intArr[] = {10,20,15,22,35}; will give result as 3 as it is the index of 22 Searching for 1.5 in doubleArr[] = {10.2,15.1,2.2,3.5} will give result as -1 as it is the insertion point of 1.5 Searching for 35.0 in floatArr[] = {10.2f,15.1f,2.2f,3.5f} will give result as -5 as it is the insertion point of 35.0 Searching for 5 in shortArr[] = {10,20,15,22,35} will give result as -1 as it is the insertion point of 5>

Це найпростіший і найефективніший спосіб знайти елемент у відсортованому масиві в Java

Синтаксис:

public static int binarySearch(data_type arr, data_type key)>

Пам'ятайте: Тут тип даних може бути будь-яким із простих типів даних, таких як byte, char, double, int, float, short, long і навіть object.



Параметри:

  • Масив для пошуку
  • Значення, яке потрібно шукати

Тип повернення: індекс ключа пошуку, якщо він міститься в масиві; інакше (-(точка вставки) – 1). Точка вставки визначається як точка, в якій ключ буде вставлено в масив: індекс першого елемента, більшого за ключ, або a.length, якщо всі елементи в масиві менші за вказаний ключ. Зауважте, що це гарантує, що повернуте значення буде>= 0 тоді і тільки якщо ключ знайдено.

Необхідно пам’ятати про деякі важливі моменти:



  • Якщо список вхідних даних не відсортований, результати не визначені.
  • Якщо є дублікати, немає гарантії, який саме буде знайдено.

Як і вище, ми вже обговорювали, що ми також можемо працювати з цим алгоритмом Arrays.binarysearch() проти Collections.binarysearch() . Arrays.binarysearch() працює для масивів, які також можуть мати простий тип даних. Колекції .binarysearch() працює для таких об’єктів, як колекції ArrayList і LinkedList .

приклад 1:

Java

підручник c#




// Java program to demonstrate working of Arrays.> // binarySearch() in a sorted array> // Importing Arrays class from> // java.util package> import> java.util.Arrays;> // Main class> public> class> GFG {> >// Main driver method> >public> static> void> main(String[] args)> >{> >// Declaring and initializing byte arrays> >// to search over them> >byte> byteArr[] = {>10>,>20>,>15>,>22>,>35> };> >char> charArr[] = {>'g'>,>'p'>,>'q'>,>'c'>,>'i'> };> >int> intArr[] = {>10>,>20>,>15>,>22>,>35> };> >double> doubleArr[] = {>10.2>,>15.1>,>2.2>,>3.5> };> >float> floatArr[] = {>10>.2f,>15>.1f,>2>.2f,>3>.5f };> >short> shortArr[] = {>10>,>20>,>15>,>22>,>35> };> >// Using sort() method of Arrays class> >// and passing arrays to be sorted as in arguments> >Arrays.sort(byteArr);> >Arrays.sort(charArr);> >Arrays.sort(intArr);> >Arrays.sort(doubleArr);> >Arrays.sort(floatArr);> >Arrays.sort(shortArr);> >// Primitive datatypes> >byte> byteKey =>35>;> >char> charKey =>'g'>;> >int> intKey =>22>;> >double> doubleKey =>1.5>;> >float> floatKey =>35>;> >short> shortKey =>5>;> >// Now in sorted array we will fetch and> >// return elements/indiciesaccessing indexes to show> >// array is really sorted> >// Print commands where we are implementing> >System.out.println(> >byteKey +>' found at index = '> >+ Arrays.binarySearch(byteArr, byteKey));> >System.out.println(> >charKey +>' found at index = '> >+ Arrays.binarySearch(charArr, charKey));> >System.out.println(> >intKey +>' found at index = '> >+ Arrays.binarySearch(intArr, intKey));> >System.out.println(> >doubleKey +>' found at index = '> >+ Arrays.binarySearch(doubleArr, doubleKey));> >System.out.println(> >floatKey +>' found at index = '> >+ Arrays.binarySearch(floatArr, floatKey));> >System.out.println(> >shortKey +>' found at index = '> >+ Arrays.binarySearch(shortArr, shortKey));> >}> }>

>

>

10 відсотків від 60
Вихід

35 found at index = 4 g found at index = 1 22 found at index = 3 1.5 found at index = -1 35.0 found at index = -5 5 found at index = -1>

Аналіз складності:

Часова складність:
Часова складність методу Arrays.binarySearch() становить O(log n), де n – довжина вхідного масиву. Це пояснюється тим, що метод використовує двійковий алгоритм пошуку для пошуку цільового елемента в сортованому масиві.

Допоміжний простір:
Метод Arrays.binarySearch() використовує допоміжний простір O(1), оскільки для виконання операції пошуку не потрібен додатковий простір, крім вхідного масиву.

Існують варіанти цього методу, у яких ми також можемо вказати діапазон масиву для пошуку. Ми обговоримо це, а також пошук у масиві Object у наступних публікаціях.

приклад 2:

Java




// Java Program to Illustrate binarySearch() method> // of Collections class> // Importing required classes> import> java.util.ArrayList;> import> java.util.Collections;> import> java.util.List;> // Main class> public> class> GFG {> >// Main driver method> >public> static> void> main(String[] args)> >{> >// Creating empty List> >List al =>new> ArrayList();> >// Adding elements to the List> >al.add(>12>);> >al.add(>53>);> >al.add(>23>);> >al.add(>46>);> >al.add(>54>);> >// Using binarySearch() method of Collections class> >// over random inserted element and storing the> >// index> >int> index = Collections.binarySearch(al,>23>);> >// Print and display the index> >System.out.print(index);> >}> }>

>

>

Вихід

як ввести макет абстрактного класу
2>

Аналіз складності:

Часова складність:
Часова складність методу binarySearch() у класі Collections становить O(log n), де n – кількість елементів у списку.

Допоміжний простір:
Метод binarySearch() у класі Collections не потребує додаткового простору, тому має складність допоміжного простору O(1).