Dvejetainis paieškos algoritmas yra efektyvesnis būdas ieškoti konkretaus elemento surūšiuotame sąraše. Skirtingai nuo linijinės paieškos, kuri elementus tikrina nuosekliai, dvejetainė paieška padalija sąrašą į dalis ir lygina tikslinį elementą su viduriniu elementu. Šis procesas kartojamas tol, kol randamas tikslinis elementas arba paieškos diapazonas tampa tuščias.
Kaip tai veikia
- Pradėkite nuo viso surūšiuoto sąrašo.
- Raskite vidurinį dabartinio paieškos diapazono elementą.
- Palyginkite vidurinį elementą su tiksline reikšme.
- Jei vidurinis elementas yra lygus tikslinei reikšmei, paieška sėkminga.
- Jei vidurinis elementas yra didesnis už tikslą, ieškokite kairėje diapazono pusėje.
- Jei vidurinis elementas yra mažesnis už tikslą, ieškokite dešinėje diapazono pusėje.
- Kartokite 2–6 veiksmus, kol bus rastas tikslinis elementas arba paieškos diapazonas taps tuščias.
Pavyzdys
Panagrinėkime surūšiuotą sveikųjų skaičių sąrašą ir norime rasti skaičių 34 naudodami dvejetainę paiešką.
Surūšiuotas sąrašas: {12, 23, 34, 45, 56, 67, 89, 90}
- Pradėkite nuo viso sąrašo.
- Vidurinis elementas: 56(4 padėtis). Palyginkite su 34.
- 56 yra didesnis nei 34. Ieškokite kairėje pusėje.
- Naujas vidurinis elementas: 23(1 padėtis). Palyginkite su 34.
- 23 yra mažesnis nei 34. Ieškokite dešinėje pusėje.
- Naujas vidurinis elementas: 45(3 padėtis). Palyginkite su 34.
- 45 yra didesnis nei 34. Ieškokite kairėje pusėje.
- Naujas vidurinis elementas: 34(2 padėtis). Taikinys rastas.
Kodo pavyzdys C++
Pateiktame pavyzdyje binarySearch
funkcija naudojama norint rasti skaičių 34 surūšiuotame sveikųjų skaičių sąraše. Rezultatas bus 34 pozicija sąraše(pozicijos prasideda nuo 0) arba -1, jei skaičius nerastas.