Линейный поиск

 

a: ARRAY[0..N] OF INTEGER

i := 0;

WHILE (i < N) AND (a[i] <> x) DO

  i := i+1 ;

END;

 Линейный поиск с барьером

a[N] := x;

i := 0;

WHILE a[i] <> x DO

  i := i+1;

END;

 

 Поиск делением пополам (двоичный поиск).

Вариант 1

L := 0;

R := N-1;

found := FALSE;

WHILE (L < R) AND NOT found DO

    m := любое значение между L и R;

    IF a[m] = x THEN found := TRUE;

    IF a[m] < x THEN L := m+1

    ELSE R := m-1;

    ENDIF;

ENDWHILE;

 

Вариант 2

L := 0;

R := N;

  WHILE L < R DO

    m := (L+R) DIV 2;

    IF a[m] < x THEN L := m+1

    ELSE R := m ;

  END

END

 

 Индексно-последовательный поиск

i = 1

while (i <= m) and (kind(i) <= key) do

         i=i+1

endwhile

if i = 1 then low = 1

             else low = pind(i-1)

endif

if i = m+1 then hi = n

                      else hi = pind(i)-1

endif

for j = low to hi

         if key = k(j) then

                            search = j

                             return

         endif

next j

search = 0

return