Module: Ricerca binaria


Problem

1/5

Ricerca binaria nell'array ordinato: start (C++)

Theory Click to read/hide

La ricerca binaria è un efficiente — la sua stima di complessità è O(log2(n)), mentre la ricerca sequenziale convenzionale ha O(n). Ciò significa che, ad esempio, per un array di 1024 elementi, una ricerca lineare, nel caso peggiore, quando l'elemento desiderato non è nell'array, elaborerà tutti i 1024 elementi. La ricerca binaria è sufficiente per elaborare gli elementi \(log_2(1024) = 10\). Questo risultato si ottiene grazie al fatto che dopo il primo passaggio del ciclo, l'area di ricerca si restringe a 512 elementi, dopo il secondo – fino a 256 ecc.

Gli svantaggi di questo algoritmo sono il requisito per l'ordinamento dei dati, nonché la possibilità di accedere a qualsiasi elemento di dati in un tempo costante (indipendente dalla quantità di dati). Pertanto, l'algoritmo non può funzionare su array non ordinati e strutture di dati basate su elenchi collegati.


Attuazione
ciao (destra – sinistra > 1)  // Finché il bordo destro è a destra di sinistra
nc
  centrale = (sinistra + destra) /< /span> 2; // Al centro dell'area di ricerca
  if (A[middle] >= b) allora
    destra = centrale; // Sposta il bordo destro
  altrimenti
    sinistra = centrale; // Altrimenti sposta il bordo sinistro
cc
se (A[right] == X)allora
  uscita destra;
altrimenti
  uscita -1;

dove:
A - matrice sorgente,
N - dimensione dell'array,
X - il numero desiderato.
 

Problem

Implementa un algoritmo di ricerca binaria.
 
Inserisci dati 
La prima riga dell'input contiene i numeri naturali N e K (\(0<N <= 100000,\ 0< K< ;=10^9\) ). La seconda riga contiene gli elementi N dell'array, ordinati in ordine crescente. Gli elementi dell'array sono numeri interi, ciascuno dei quali non supera 109.
 
Uscita
È necessario che  K emetta il suo numero nell'array su una riga separata, se questo numero compare nell'array, e "NO" altrimenti.
 
Esempi
# Input Uscita
1
105
1 2 3 4 5 6 7 8 9 10
5