Il confronto (i <= N) ripetuto ad ogni passo del while () do pu?essere eliminato se si introduce la sentinella, la chiave della ricerca, alla prima posizione libera nel vettore (la (N+1)-esima, senza modificare N...); in questo modo il ciclo si chiude comunque nel caso in cui la chiave non esista.
Function Sentinella(V: Vettore; N: Integer; K: Elemento): Integer;
Var
i: Integer;
Begin
i:=1;
V[N+1]:=K;
While(V[i] <> K) do
i:=i+1;
If(i > N) then
Sentinella:=0
Else
Sentinella:=i;
End;
Se il vettore è ordinato...
Function Sentinella(V: Vettore; N: Integer; K: Elemento): Integer;
Var
I: Integer;
Begin
i:=1;
V[N+1]:=K;
While(V[i] < K) do
i:=i+1;
If(i > N) Or (V[i] > K) then
Sentinella:=0
Else
Sentinella:=i;
End; |