Wyszukiwanie binarne¶
Opis problemu¶
Wersja iteracyjna¶
Funkcja binary_search_iterative
przyjmuje dwa argumenty: listę array
oraz liczbę number
, którą chcemy znaleźć. Oto, jak działa ta funkcja:
- Ustawia lewy
left
indeks na \(0\), a prawyright
indeks na długość listy minus jeden. - W pętli while, dopóki lewy indeks jest mniejszy od prawego, wykonuje następujące operacje:
- Wyznacza indeks środkowy
middle
jako średnią indeksów lewego i prawego (dzielenie całkowite). - Jeżeli szukana liczba
number
jest mniejsza od liczby w środku listy, ustawia prawy indeks na środkowy. - Jeżeli szukana liczba jest większa od liczby w środku listy, ustawia lewy indeks na środkowy plus jeden.
- Jeżeli liczba w środku listy jest równa szukanej liczbie, zwraca indeks środkowy.
- Wyznacza indeks środkowy
- Po zakończeniu pętli, jeżeli lewy indeks jest mniejszy od długości listy i liczba pod tym indeksem jest równa szukanej liczbie, zwraca lewy indeks.
- Jeżeli liczba nie została znaleziona, zwraca \(-1\).
W głównym ciele programu:
- Definiuje listę
array
oraz szukaną liczbęnumber
. - Wywołuje funkcję
binary_search_iterative
z listą i szukaną liczbą. - Wyświetla indeks, pod którym znajduje się szukana liczba. Jeżeli liczba nie została znaleziona, wyświetli \(-1\).
Wersja rekurencyjna¶
Funkcja binary_search_recursive
przyjmuje cztery argumenty: listę array
, liczbę number
do znalezienia, oraz indeksy left
i right
określające zakres, w którym szukamy liczby. Oto jak działa ta funkcja:
- Jeżeli lewy indeks
left
jest mniejszy od prawego indeksuright
, wykonuje następujące operacje: - Wyznacza indeks środkowy
middle
jako średnią indeksów lewego i prawego (dzielenie całkowite). - Jeżeli szukana liczba
number
jest mniejsza od liczby w środku listy, wywołuje sama siebie rekurencyjnie z niezmienionym lewym indeksem i środkowym indeksem jako prawym indeksem. - Jeżeli szukana liczba jest większa od liczby w środku listy, wywołuje sama siebie rekurencyjnie ze środkowym indeksem plus jeden jako lewym indeksem i niezmienionym prawym indeksem.
- Jeżeli liczba w środku listy jest równa szukanej liczbie, zwraca indeks środkowy.
- Jeżeli lewy indeks jest mniejszy od długości listy i liczba pod tym indeksem jest równa szukanej liczbie, zwraca lewy indeks.
- Jeżeli liczba nie została znaleziona, zwraca \(-1\).
W głównym ciele programu:
- Definiuje listę
array
oraz szukaną liczbęnumber
. - Wywołuje funkcję
binary_search_recursive
z listą, szukaną liczbą oraz indeksami \(0\) i długość listy. - Wyświetla indeks, pod którym znajduje się szukana liczba. Jeżeli liczba nie została znaleziona, wyświetli \(-1\).