önce
{
-ms-user-select: yok;
-moz-user-select: yok;
-webkit-user-select: yok;
kullanıcı seçimi: yok; }
İkili Arama
İkili (veya ikili) arama verimli bir arama algoritmasıdır ve doğrusal aramadan daha hızlıdır. Örneğin 1024 elemanlı bir dizi için en kötü durumda (istenen eleman dizide yokken) bir lineer arama 1024 elemanın tamamını işleyecektir fakat ikili arama ile 10 elemanı işlemek yeterlidir. Bu sonuç, döngünün ilk adımından sonra arama alanının 512 öğeye, ikinci adımdan sonra 512 öğeye kadar daralması nedeniyle elde edilir. 256'ya kadar vs.
Böyle bir algoritmanın dezavantajları, veri sıralama gereksiniminin yanı sıra herhangi bir veri öğesine sabit (veri miktarından bağımsız) bir süre içinde erişebilme yeteneğidir. Bu nedenle algoritma sırasız dizilerde çalışamaz.
Algoritma
- Orta öğeyi
A[c]
seçin ve X
ile karşılaştırın.
- Eğer
X = A[c]
ise bulundu (dur).
- Eğer
X < A[c]
, ilk yarıda daha fazla arama yapın.
- Eğer
X > A[c]
ise, ikinci yarıya daha yakından bakın.
Uygulama
L = 0; R=N; // başlangıç bölümü
iken ( L < R - 1)
{
c = (Sol + Sağ) / 2; // ortasını bulduk
if ( X < A[c] ) // segment sıkıştırma
R=c;
başka
L = c;
}
eğer ( A[L] == X)
cout
nerede:
A
- kaynak dizisi,
N
- dizi boyutu,
X
- aranan numara,
Diğer uygulamalar mümkündür.
Örneğin, döngüden erken çıkış kullanmak
L = 0; R = N - 1;
iken (R >= L)
{
c = (Sol + Sağ) / 2;
eğer ( X == A[c] )
{
nX = c;
kırmak;
}
eğer (X < A[c]) R = orta - 1;
eğer (X > A[c]) L = orta + 1 ise;
}
eğer ( nX < 0)
cout