INF.04Algorytmika i Struktury Danych
Wyszukiwanie binarne (Binary Search)
Algorytm wyszukiwania w posortowanej tablicy o złożoności O(log n), porównujący szukaną wartość ze środkowym elementem i odrzucający połowę zbioru.
Warunek konieczny:
Tablica MUSI BYĆ POSORTOWANA! Próba wykonania wyszukiwania binarnego na nieposortowanych danych da błędny wynik.
Algorytm:
- Oblicz indeks środkowego elementu:
mid = (lewy + prawy) / 2. - Jeśli
tab[mid] == szukana, znaleziono element. - Jeśli
tab[mid] > szukana, szukaj w lewej połowie (prawy = mid - 1). - Jeśli
tab[mid] < szukana, szukaj w prawej połowie (lewy = mid + 1).
CPP
int binarySearch(int tab[], int n, int szukana) {
int lewy = 0, prawy = n - 1;
while (lewy <= prawy) {
int mid = lewy + (prawy - lewy) / 2;
if (tab[mid] == szukana) return mid;
if (tab[mid] < szukana) lewy = mid + 1;
else prawy = mid - 1;
}
return -1; // brak elementu
}Złożoność:
- Złożoność czasowa: O(log n) (np. w tablicy 1 000 000 elementów wystarczy maksymalnie 20 porównań!).
- Wyszukiwanie liniowe (dla porównania): wymaga O(n) porównań.
Chcesz sprawdzić to pojęcie w praktyce?
Przeszukaj pytania z oficjalnych arkuszy CKE powiązane z hasłem Wyszukiwanie binarne (Binary Search) lub rozpocznij trening.