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
locome0ehicomen - 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 impostarelocomemid+1. - Altrimenti se
A[mid] > X, scartare la metà destra degli elementi e impostarehicomemid-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
locome0ehicomen-1. -
se
lo>hi, abbiamo esaurito lo spazio di ricerca dell’array, restituisce -1. -
Calcola il punto medio
midcomelo+(hi-lo)/2. Divide la matrice in due parti: la metà inferiore con elementi da0ametà - 1e 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