Algorytm szuka danego elementu w tablicy uporządkowanej (posortowanej). Jest realizowany metodą "dziel i zwyciężaj". Dzieli on tablicę na mniejsze podtablice do momentu wyszukania pozycji elementu szukanego.
Przykład
Przeanalizujmy następujący zbiór 8 uporządkowanych liczb:
1, 2, 5, 8, 9, 11, 15, 20 Potrzebne będą nam trzy zmienne pomocnicze:
l − przechowuje numer lewego krańca tablicy,
p − przechowuje numer prawego krańca tablicy,
sr − przechowuje numer środkowego elementu tablicy.
W pierwszym kroku algorytmu ustawiamy:
int l = 0;
int p = 7;
int sr = (l+p)/2;
Źródło: Jakub Piskorowski
Następnie sprawdzamy czy szukany element znajduje się na pozycji sr. Jeśli tak to znaleźliśmy daną liczbę, w przeciwnym przypadku sprawdzamy czy szukana liczba jest mniejsza czy większa niż liczba znajdująca się na środkowej pozycji.
Jeśli jest mniejsza, tzn., że mamy do przeszukania lewą część badanej tablicy. Zmieniamy wartość zmiennej.
p = sr−1
a więc:
Źródło: Jakub Piskorowski
W przypadku gdy jest większa to przeszukujemy prawą część tablicy. Zmieniamy wartość zmiennej l na:
l = sr + 1
a więc:
Źródło: Jakub Piskorowski
Czynność tą powtarzamy do momentu znalezienia szukanej wartości, lub gdy zmienne l i r spełnią warunek: l > r. W takim przypadku element nie występuje w zbiorze liczb.
Wejście funkcji:
szukana- poszukiwana liczba
tab[15]- tablica z posortowanymi wartościami (2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47)
Wyjście funkcji:
pozycja- indeks (pozycja) tablicy na której znajduje się poszukiwana wartość
Zmienne pomocnicze:
l - przechowuje indeks lewego krańca tablicy,
p - przechowuje indeks prawego krańca tablicy,
sr - przechowuje indeks środkowego elementu tablicy
Lista kroków:
K1: l ← 0
K2: p ← 15
K3: sr ← (l+p)/2
K4: Dopóki l <= p
wykonuj kroki od K5 do K7
K5: Jeśli tab[sr] = szukana
zwróć sr
K6: Jeśli tab[sr] > szukana
to p ← sr - 1
inaczej l ← sr + 1
K7: sr ← (l+p)/2
K8: zwróć -1
Wynik działania:
Podaj liczbe ktora chcesz znalezc: 29
Liczba 29 wystepuje w zbiorze w komorce o indeksie: 9