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
leftindeks na \(0\), a prawyrightindeks 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
middlejako średnią indeksów lewego i prawego (dzielenie całkowite). - Jeżeli szukana liczba
numberjest 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ę
arrayoraz szukaną liczbęnumber. - Wywołuje funkcję
binary_search_iterativez 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
leftjest mniejszy od prawego indeksuright, wykonuje następujące operacje: - Wyznacza indeks środkowy
middlejako średnią indeksów lewego i prawego (dzielenie całkowite). - Jeżeli szukana liczba
numberjest 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ę
arrayoraz szukaną liczbęnumber. - Wywołuje funkcję
binary_search_recursivez 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\).