Binární vyhledávací algoritmus je efektivnější způsob hledání konkrétního prvku v seřazeném seznamu. Na rozdíl od lineárního vyhledávání, které kontroluje prvky postupně, binární vyhledávání rozděluje seznam na poloviny a porovnává cílový prvek se středním prvkem. Tento proces se opakuje, dokud není nalezen cílový prvek nebo dokud se oblast hledání nevyprázdní.
Jak to funguje
- Začněte s celým seřazeným seznamem.
- Najděte prostřední prvek aktuálního rozsahu vyhledávání.
- Porovnejte prostřední prvek s cílovou hodnotou.
- Pokud se prostřední prvek rovná cílové hodnotě, je vyhledávání úspěšné.
- Pokud je prostřední prvek větší než cíl, hledejte v levé polovině rozsahu.
- Pokud je prostřední prvek menší než cíl, hledejte v pravé polovině rozsahu.
- Opakujte kroky 2–6, dokud nenaleznete cílový prvek nebo dokud nebude rozsah hledání prázdný.
Příklad
Uvažujme seřazený seznam celých čísel a chceme najít číslo 34 pomocí binárního vyhledávání.
Seřazený seznam: {12, 23, 34, 45, 56, 67, 89, 90}
- Začněte s celým seznamem.
- Střední prvek: 56(pozice 4). Porovnejte s 34.
- 56 je větší než 34. Hledejte v levé polovině.
- Nový střední prvek: 23(pozice 1). Porovnejte s 34.
- 23 je menší než 34. Hledejte v pravé polovině.
- Nový střední prvek: 45(pozice 3). Porovnejte s 34.
- 45 je větší než 34. Hledejte v levé polovině.
- Nový střední prvek: 34(pozice 2). Cíl nalezen.
Příklad kódu v C++
V uvedeném příkladu binarySearch
je funkce použita k nalezení čísla 34 v seřazeném seznamu celých čísel. Výsledkem bude pozice 34 v seznamu(pozice začínají od 0) nebo -1, pokud číslo nebude nalezeno.