Ricerca binaria Java interattiva e ricorsiva
- Algoritmo di ricerca binaria iterativa
- Programma iterativo Java per la ricerca binaria
- Algoritmo di ricerca binaria ricorsiva
- Programma ricorsivo Java per la ricerca binaria
-
Arrays.binarySearch()
Panoramica - Programma Java per la ricerca binaria
Algoritmo di ricerca binaria iterativa
Supponiamo di avere un array non ordinato A[]
contenente n
elementi e di voler trovare un elemento X
.
-
Imposta
lo
come0
ehi
comen - 1
. -
Mentre
lo
<hello
:- Impostare
mid
=lo + (hi - lo)/2
. - Se
A[mid] == X
, abbiamo trovato che l’elemento restituisce l’indicemid
. - Se
A[mid] < X
, scartare la metà sinistra degli elementi e impostarelo
comemid+1
. - Altrimenti se
A[mid] > X
, scartare la metà destra degli elementi e impostarehi
comemid-1
.
- Impostare
-
L’elemento non è stato trovato, quindi restituisci
-1
.
Programma iterativo Java per la ricerca binaria
class BinarySearch {
int binarySearch(int arr[], int x) {
int lo = 0, hi = arr.length - 1;
while (lo <= hi) {
int mid = lo + (hi - lo) / 2;
if (arr[mid] == x)
return mid;
if (arr[mid] < x)
lo = mid + 1;
else
hi = mid - 1;
}
return -1;
}
public static void main(String args[]) {
BinarySearch ob = new BinarySearch();
int arr[] = {1, 2, 3, 4, 5};
int n = arr.length;
int x = 5;
int position = ob.binarySearch(arr, x);
if (position == -1)
System.out.println("Element not present");
else
System.out.println("Element found at index: " + position);
}
}
Produzione:
Element found at index: 4
Algoritmo di ricerca binaria ricorsiva
Supponiamo di avere un array non ordinato A[]
contenente n
elementi e di voler trovare un elemento X
.
-
Inizializza
lo
come0
ehi
comen-1
. -
se
lo
>hi
, abbiamo esaurito lo spazio di ricerca dell’array, restituisce -1. -
Calcola il punto medio
mid
comelo+(hi-lo)/2
. Divide la matrice in due parti: la metà inferiore con elementi da0
ametà - 1
e la metà superiore con elementi dametà
an - 1
. -
Se
X
==mid
, abbiamo trovato che l’elemento target ritornamid
. -
Se
X
è minore dimid
, cerca nella metà inferiore dell’array chiamando ricorsivamentebinarysearch(arr, lo, mid-1)
. -
Altrimenti se
X
è maggiore dimid
, cerca nella metà superiore dell’array chiamando ricorsivamentebinarysearch(arr, mid+1, hi)
.
Programma ricorsivo Java per la ricerca binaria
class BinarySearch {
int binarySearch(int arr[], int lo, int hi, int x) {
if (hi >= lo && lo < arr.length - 1) {
int mid = lo + (hi - lo) / 2;
if (arr[mid] == x)
return mid;
if (arr[mid] > x)
return binarySearch(arr, lo, mid - 1, x);
return binarySearch(arr, mid + 1, hi, x);
}
return -1;
}
public static void main(String args[]) {
BinarySearch ob = new BinarySearch();
int arr[] = {1, 2, 3, 4, 5};
int n = arr.length;
int x = 2;
int position = ob.binarySearch(arr, 0, n - 1, x);
if (position == -1)
System.out.println("Element not found !!!");
else
System.out.println("Element found at index: " + position);
}
}
Produzione:
Element found at index: 1
Arrays.binarySearch()
Panoramica
Java ci fornisce una funzione pronta per l’uso Arrays.binarySearch()
in modo da non dover implementare la funzione da soli. È un metodo molto semplice da usare e implementato in modo efficiente e non è soggetto a errori.
Sintassi
public static int binarySearch(T arr, T key)
T
può essere uno dei seguenti: int
, float
, short
, long
, byte
, char
, double
e anche un Object
definito dall’utente.
Proprio come la nostra ricerca binaria implementata, richiede anche che l’array sia ordinato altrimenti i risultati non sono definiti. Cerca nell’array utilizzando l ‘algoritmo di ricerca binaria e trova l’indice dell’elemento di destinazione. Se sono presenti più occorrenze dell’elemento target, può restituire l’indice di ognuna di esse.
Parametri
Arr |
La matrice di input |
Key |
L’elemento target che stiamo cercando. |
Ritorno
Se trova l’elemento di destinazione, restituisce il suo indice. Altrimenti, restituisce beg - 1
dove beg
è l’indice iniziale dello spazio di ricerca dell’array.
Programma Java per la ricerca binaria
import java.util.Arrays;
class BinarySearchExample {
public static void main(String args[]) {
int arr[] = {1, 2, 3, 4, 5};
int key = 2;
int result = Arrays.binarySearch(arr, key);
if (result < 0)
System.out.println("Element is not found!");
else
System.out.println("Element is found at index: " + result);
}
}
Produzione:
Element is found at index: 1
Harshit Jindal has done his Bachelors in Computer Science Engineering(2021) from DTU. He has always been a problem solver and now turned that into his profession. Currently working at M365 Cloud Security team(Torus) on Cloud Security Services and Datacenter Buildout Automation.
LinkedIn