75 12 57 30 3
elemento da cercare = 57
1 2 3 4 5
Passo 1 i=1 75 12 57 30 3
Passo 2 i=2
confronto
Passo 3 75i con
= 3 57 sono diversi
sono diversi
L’elemento 57
confronto 12 con 57
sono uguali si trova
confronto 57 con 57
alla posizione
di indice 3
II caso
l’elemento non è 1 2 3 4 5
presente 75 12 57 30 3
elemento da cercare = 1
1 2 3 4 5
Passo 1 i=1 75 12 57 30 3
Passo 2 i=2
Passo
confronto
3 75i =con
3 1 sono diversi
Passo 4 125con
i = 14i = 5 sono diversi
L’elemento
confronto
Passo
6 1 >= nsono
= 5 diversi non è
confronto 57i =con
presente
confronto 30 con 1 sono diversi
confronto 3 con 1 sono diversi nell’insieme
start
i=1
elemento ≠ V [i]
and
i<=n
si
i = i+1
no
no si
i <=n
Elemento Elemento
Non trovato trovato in posizione i
end
valore da cercare: 10 primo ultimo
passo 1 1 3 5 10 15 23 31 47 47 56 64
1 2 3 4 5 6 7 8 9 10 11
elemento di mezzo (10 < 23)
passo 2 1 3 5 10 15 23 31 47 47 56 64
1 2 3 4 5 6 7 8 9 10 11
elemento di mezzo (10 > 5)
passo 3 1 3 5 10 15 23 31 47 47 56 64
1 2 3 4 5 6 7 8 9 10 11
max = N
med = ⎣ (max+min)/2 ⎦
elemento ≠ V [med] no
and
min < max
si
no si
elemento > V [med]
no si
max > min
Elemento Elemento
Non trovato trovato in posizione med
end
valore da cercare: 8
passo 1 1 3 5 10 15 23 31 47 47 56 64
1 2 3 4 5 6 7 8 9 10 11
elemento di mezzo (8 < 23)
passo 2 1 3 5 10 15 23 31 47 47 56 64
1 2 3 4 5 6 7 8 9 10 11
elemento di mezzo (8 > 5)
passo 4 1 3 5 10 15 23 31 47 47 56 64
1 2 3 4 5 6 7 8 9 10 11
function pos=ricerca_bin(x, vet)
num_el = numel(vet);
inf=1;
sup=num_el;
med=0;
trovato=0;
while (~trovato & (inf<=sup))
med=floor((inf+sup)/2);
if vet(med) == x
trovato=1;
else
if vet(med)> x
sup = med-1;
else
inf=med+1;
end
end
end
if trovato == 1
pos=med;
else
pos=-1;
end