const vettLenght = 1000; {Capacita' del tipo-array vett} type vett = array [0..vettLenght-1] of integer; var v1 : vett; v1Size : integer; {Numero di elementi utilizzati nell'array v1}
{ AI: 0 <= vSize <= vettLength-1 AND v[0..vSize-1] e' ordinato in ordine non decrescente AF: restituisce un i tale che v[i]=x, -1 se un tale i non esiste } function ricercaBinaria (x:integer; var v:vett; vSize:integer) var i:integer; lo,hi:integer; trovato:boolean; begin lo:=0; hi:=vSize-1; trovato:=false; { IC: se esiste un j tale che v[j]=x allora lo <= j <= hi AND trovato = (x=v[i]) } while (lo <= hi) AND (not trovato) do begin i:=(hi+lo) div 2; if x=v[i] then trovato:=true else if v[i] < x then lo:=i+1 else hi:=i-1; end; if trovato then ricercaBinaria:=i else ricercaBinaria:=-1; end;
{ AI: 0 <= vSize <= vettLength-1 AND v[0..vSize-1] e' ordinato in ordine non decrescente AF: restituisce un i tale che v[i]=x, -1 se un tale i non esiste } function ricercaBinaria (x:integer; var v:vett; vSize:integer) var i:integer; lo,hi:integer; begin lo:=0; hi:=vSize-1; i:=vSize; { IC: se esiste un j tale che v[j]=x allora lo <= j <= hi } while lo <= hi do begin i:=(hi+lo) div 2; if x=v[i] then begin ricercaBinaria:=i; exit; end else if v[i] < x then lo:=i+1 else hi:=i-1; end; ricercaBinaria:=-1; end;
Complessita' in spazio: entambe le versioni della function
ricercaBinaria
NOTA: il vettore v e' passato per referenza (var) .
Complessita' in tempo: entambe le versioni della function ricercaBinaria hanno complessita' in tempo che e':