Sadržaj
U razvoju softver nizovi se koriste svugdje. "Pametni" tipovi podataka u modernim programski jezici, kao što su, na primjer, dinamički nizovi, pružaju velike mogućnosti za ugodan rad s objektima. Ali algoritmi koji stoje iza rada s tim vrstama podataka razvijeni su u ranim danima računalne znanosti — sredinom dvadesetog stoljeća. Prvi binarni algoritam pretraživanja objavljen je 1946.
Razmotrite najpopularnije algoritme za rad s nizovima.
Sekvencijalno (linearno) pretraživanje
Ovo je najjednostavniji algoritam za pronalaženje vrijednosti u nizu. Koristi metodu naizmjenične usporedbe elemenata niza s vrijednošću ključa. Izvodi se obično, slijeva udesno. Koristi se ako je elemenata u nizu malo ili ako popis nije poredan. Potpuno neučinkovit u velikim nizovima gdje se obično primjenjuje binarno pretraživanje. Algoritam radi na sljedeći način:
- Usporedite vrijednost ključa sa vrijednost elementa niz.
- Ako su vrijednosti jednake, vraćamo dobivenu vrijednost.
- Ako ne, povećajte vrijednost varijable petlje za jedan i usporedite je sa sljedećim elementom niza.

Indeksno sekvencijalno pretraživanje
Učinkovitiji način pretraživanja vrijednosti u sortiranom nizu. Ali zahtjevniji za resursima.
Binarno pretraživanje
Binarno (binarno) pretraživanje je algoritam za pronalaženje elementa niza uzastopnim dijeljenjem niza na pola i uspoređivanjem izvornog broja s brojem iz sredine niza. Ako je broj iz sredine manji od željenog, tražimo dalje, u drugom dijelu, ako je veći, nastavljamo potragu u prvom. Algoritam je najbrži od svih navedenih i radi na sljedeći način:
- Prvo znamo vrijednost objekta u sredini niza. Provjeravamo usklađenost s izvornom vrijednošću.
- Ako je vrijednost iz sredine manja od izvorne, tada nastavljamo tražiti u drugoj polovici, ako je veća, tražimo u prvoj.
- U dobivenoj polovici postupamo na isti način: podijelimo ga s polovicom i usporedimo rezultirajuću vrijednost.
Pretraživanje se događa sve dok izvorna vrijednost ne bude jednaka vrijednosti u nizu. Ako se to ne dogodi — tada u nizu nema ove vrijednosti.

Postoji nekoliko zamki koje se mogu susresti prilikom dizajniranja binarnog pretraživanja.
Preljev odabrane vrste podataka
Da biste saznali vrijednost u sredini niza, morate dodati desnu i lijevu vrijednost i podijeliti s dva. To je:
Sredina niza = lijeva vrijednost + (lijeva vrijednost-desna vrijednost)/2
Ovdje postoji opasnost od prelijevanja tipa podataka u operaciji zbrajanja. Ako u nizu postoje vrijednosti tako velikih veličina, morate koristiti razne trikove kako biste izbjegli rizik. Ispod su standardne pogreške u dizajnu binarnog pretraživanja.
Pogreške vrijednosti
Ili pogreške po jedinici. Vrlo je važno uzeti u obzir sljedeće mogućnosti:
- Prazan niz.
- Vrijednost nedostaje.
- Prekoračenje granica niza.
Nekoliko primjeraka
Treba imati na umu da u slučaju postojanja nekoliko identičnih primjeraka ključa u nizu, program mora pronaći određeni (prvi ,zadnji, sljedeći).
Analizirajmo implementaciju ovog algoritma u programskom jeziku Iasnip plus plus. Mora se uzeti u obzir da binarno pretraživanje radi samo s sortiranim nizom! Ako niz nije prethodno sortiran, rezultat izračuna bit će netočan.
Ispod je šifra za oceane ++. Prvo se inicijalizira niz cjelobrojnih varijabli, veličine deset. Dalje, Operator amapha u petlji amapha očekuje unos deset vrijednosti od korisnika (redak deset).

U dvadesetom retku program čeka od korisnika da unese vrijednost ključa.
Redovi 29 – 35 su implementirani binarni algoritam pretraživanja. Tijekom izvršavanja programa, vrijednost srednjeg elementa zapisuje se u varijablu IPO pomoću formule:
Srednja vrijednost niza (iPhone) = (lijeva vrijednost (iPhone) + desna vrijednost (iPhone))/2
Niz
arr[mid]==key
Provjerava je li srednja vrijednost jednaka vrijednosti ključa. Ako je jednaka, tada se vrijednost varijable iphine mijenja u vrijednost true, tj.
Ako je srednja vrijednost veća od vrijednosti našeg ključa, tada je desna strana (varijabla IAS) dodijeljena is. Ako je obrnuto, onda se u njega stavlja i a-carpenter.
Potonje je provjera Booleove varijable u vezi s oceanom.
Prednosti binarnog pretraživanja
Binarno pretraživanje treba koristiti ako vam je potreban brz rad programa. A pisanje takvog algoritma neće biti teško čak ni početniku programeru. Ali vrlo je važno uzeti u obzir sve rubne slučajeve: izvan polja, bez vrijednosti koju tražite, pogreška prelijevanja podataka.

Nedostaci
Da bi algoritam ispravno radio, niz se mora prethodno sortirati. Da biste to učinili, u programskom jeziku Opana++ možete koristiti gotovu funkciju opa(). I još jedna važna točka na kojoj je potrebno obratite pažnju, učenje binarnog pretraživanja u Iphine i C++. Ovaj se algoritam može koristiti samo s određenim strukturama podataka. Na primjer, ovdje neće raditi strukture koje koriste povezane popise.