Sunteți pe pagina 1din 2

Prof.Aron Marius, Liceul Teoretic C.A.

Rosetti, Catedra de Informatic 2008-2009



CUTARE BINAR



Se citesc n numere ntregi sortate cresctor. De asemenea se citete un numr
ntreg nr. S se decid dac nr se gsete n irul celor n numere citite.


Cutarea se efectueaz ntre numerele reinute de componente de indice reinute
de dou variabile 1i i 1s(iniial 1i = 1 i 1s = n).



MECANISM DE EXECUTARE:

se calculeaz indicele componentei de mijloc, n cazul n care n este impar, sau a uneia
din cele dou plasate n mijloc, n cazul n care n este par ( k=(1i+1s) div 2);

apar 3 posibiliti:

o valoarea reinut de componenta de indice calculat este egal cu nr(caz n care
cutarea se termin cu succes)
o valoarea reinut de componenta de indice calculat este mai mic decat nr(caz
n care numrul va fi cutat ntre componentele de indice 1i = k+1 i 1s)
o valoarea reinut de componenta de indice calculat este mai mare decat nr (caz
n care numrul va fi cutat ntre componentele de indice 1i i 1s = k-1)

Cutarea se termin cnd numrul a fost identificat sau cnd 1i > 1s(cutare fr succes).


EXEMPLU:

Se citesc numerele de mai jos i nr=12. Iniial, 1i=1, 1s=4. Avem k= (1+4) div2 = 2.



A

A[1] A[2] A[3] A[4]

k=2




1i=1 1s=4
3 5 6 12
- 1 -
Prof.Aron Marius, Liceul Teoretic C.A.Rosetti, Catedra de Informatic 2008-2009

A[2]=5 < 12=nr. Deci 1i=k+1=3; 1s=4; k=(1i+1s)div2=3. Cutarea se face ntre
componentele de indice 3, 4, iar comparaia se face ntre nr si A[3].






#include<iostream.h>
#include<conio.h>
void main()
{int a[100],n,i,1i,1s,k,nr,gasit;
cout<<n=;cin>>n;
for (i=0;i<n;i++)
{ cout<<a[<<i+1<<]=;cin>>a[i]};
cout<<nr=; cin>>nr;
1i=0; 1s=n-1; gasit=0;
do
{k=(1i+1s)/2;
if(a[k]==nr)
{cout<<gasit pe pozitia <<k+1;
gasit=1;}
else
if (a[k]<nr) 1i=k+1;
else 1s=k-1;}
while (1i<1s && !gasit);
if(1i>1s) cout<<negasit;
getch();}

- 2 -