Ta postopek si pomaga z dejstvom, da je tabela urejena. V mislih jo razdelimo pri srednjem elementu (recimo a[m]
) na dve polovici. Če je x
manjši od a[m]
, je tudi manjši od vseh elementov v desni polovici tabele (kajti oni so še večji od a[m]
), torej ga moramo v nadaljevanju iskati le v levi polovici tabele. Podobno pa, če je x
večji od a[m]
, je večji tudi od vseh elementov v levi polovici tabele, zato ga moramo iskati naprej v desni polovici. Tako z vsakim takim korakom (vsako iteracijo zanke while
) razpolovimo območje, ki ga moramo še preiskati. (Mimogrede, temu postopku s tujko rečemo bisekcija, kar dobesedno pravzaprav pomeni ravno razdeljevanje na dva kosa.)
Če bi namesto s tabelo dolžine n začeli z dvakrat tolikšno tabelo, ne bi potrebovali dvakrat več časa kot pri n, ampak le eno iteracijo več. Takšna časovna zahtevnost torej narašča veliko počasneje od linearne. V splošnem za tabelo dolžine n = 2c potrebujemo le c iteracij. V matematiki takemu c, za katerega velja 2c = n, pravijo »(dvojiški) logaritem« števila n, zato pravimo, da ima naša funkcija Poisci
logaritemsko časovno zahtevnost.
Dopolni funkcijo Poisci
tako, da bo izpisala, koliko iteracij zanke while
je izvedla. Preizkusi jo na tabelah dolžine n za različne n in opazuj, kako se število iteracij spreminja v odvisnosti od n. Še posebej so zanimivi tisti n, ki so potence števila 2, torej n = 2, 4, 8, 16, ... itd.