Algorytm wyszukiwania binarnego jest bardziej wydajnym sposobem wyszukiwania określonego elementu na posortowanej liście. W przeciwieństwie do wyszukiwania liniowego, które sprawdza elementy sekwencyjnie, wyszukiwanie binarne dzieli listę na połowy i porównuje element docelowy z elementem środkowym. Proces ten jest powtarzany do momentu znalezienia elementu docelowego lub wyczerpania zakresu wyszukiwania.
Jak to działa
- Zacznij od całej posortowanej listy.
- Znajdź środkowy element bieżącego zakresu wyszukiwania.
- Porównaj środkowy element z wartością docelową.
- Jeśli środkowy element jest równy wartości docelowej, wyszukiwanie zakończyło się powodzeniem.
- Jeśli środkowy element jest większy niż cel, szukaj w lewej połowie zakresu.
- Jeśli środkowy element jest mniejszy niż cel, szukaj w prawej połowie zakresu.
- Powtarzaj kroki 2-6, aż element docelowy zostanie znaleziony lub zakres wyszukiwania stanie się pusty.
Przykład
Rozważmy posortowaną listę liczb całkowitych i chcemy znaleźć liczbę 34 za pomocą wyszukiwania binarnego.
Sortowana lista: {12, 23, 34, 45, 56, 67, 89, 90}
- Zacznij od całej listy.
- Element środkowy: 56(pozycja 4). Porównaj z 34.
- 56 jest większe niż 34. Szukaj w lewej połowie.
- Nowy środkowy element: 23(pozycja 1). Porównaj z 34.
- 23 jest mniejsze niż 34. Szukaj w prawej połowie.
- Nowy środkowy element: 45(pozycja 3). Porównaj z 34.
- 45 jest większe niż 34. Szukaj w lewej połowie.
- Nowy środkowy element: 34(pozycja 2). Znaleziono cel.
Przykładowy kod w C++
W podanym przykładzie binarySearch
funkcja służy do znalezienia liczby 34 na posortowanej liście liczb całkowitych. Wynikiem będzie pozycja 34 na liście(pozycje zaczynają się od 0) lub -1 jeśli numer nie zostanie znaleziony.