# İkili Arama

Adres: https://softwaredictionary.org/tr/terimler/binary-search
Kategori: Veri Yapıları
Son güncelleme: 2026-09-30
İngilizcesi: Binary Search
Okunuşu: baynıri sörç

Kısaca: İkili arama, sıralı bir listedeki bir değeri arama aralığını sürekli yarıya bölerek bulan bir algoritmadır; her öğeyi denetlemek yerine O(log n) sürer.

## İkili arama (binary search) nedir?

İkili arama, sıralı bir koleksiyonda hedef bir değeri arar. Hedefi ortadaki öğeyle karşılaştırır: eşleşirlerse arama biter; hedef daha küçükse sol yarıda, daha büyükse sağ yarıda devam eder. Her adım kalan öğelerin yarısını eler.

Aralık her seferinde yarıya indiği için ikili arama en fazla yaklaşık log2(n) adım gerektirir; bu O(log n) süredir. Bir milyon öğelik sıralı bir liste için bu en fazla 20 karşılaştırma, bir milyar öğe için yaklaşık 30'dur; öğelere tek tek bakan doğrusal aramada ise bir milyara kadar denetim gerekebilir. Döngü tabanlı sürüm ayrıca yalnızca O(1) ek bellek gerektirir.

Diğer oyuncunun yalnızca daha yüksek ya da daha düşük dediği sayı tahmin oyunu gibi çalışır: en akıllı strateji her zaman kalan aralığın ortasını tahmin etmektir. İkili arama; sıralı dizilerde öğe aramada, veritabanı indekslerinde ve arama ağaçlarında, Python'ın `bisect` modülü gibi standart kütüphane araçlarında ve commit geçmişini tekrar tekrar yarıya bölerek hatayı getiren commit'i bulan `git bisect` içinde kullanılır.

İkili arama yalnızca dizi gibi indeksle hızlı erişim sağlayan sıralı verilerde çalışır; bağlı listede yalnızca ortadaki öğeye ulaşmak bile O(n) sürer. Ayrıca sinsi biçimde yanlış yapmak kolaydır: döngü sınırlarında bir eksik ya da fazla hataları yaygındır ve sabit boyutlu tamsayılı dillerde ortayı `(low + high) / 2` olarak hesaplamak taşmaya yol açabilir; bu yüzden `low + (high - low) / 2` daha güvenli biçimdir. Bir algoritma olan ikili aramayı, değerleri aynı şekilde aranabilecek biçimde saklayan bir veri yapısı olan ikili arama ağacıyla karıştırmayın.

## Önemli noktalar

- İkili arama, verinin sıralı olmasını gerektirir.
- Doğrusal aramadaki O(n)'e karşılık O(log n) sürede çalışır.
- Her karşılaştırma kalan öğelerin yarısını eler.
- İndeksle hızlı erişim gerektirir; bu yüzden bağlı listelere değil dizilere uygundur.
- Döngü sınırlarındaki bir eksik ya da fazla hataları en yaygın hatadır.

## Örnek: Python'da yinelemeli ikili arama

```python
def binary_search(items, target):
    # items must be sorted in ascending order
    low, high = 0, len(items) - 1
    while low <= high:
        mid = (low + high) // 2
        if items[mid] == target:
            return mid        # found it
        if items[mid] < target:
            low = mid + 1     # target is in the right half
        else:
            high = mid - 1    # target is in the left half
    return -1                 # target is not in the list

print(binary_search([2, 5, 8, 12, 16, 23, 38], 23))  # 5
```

## Sık sorulan sorular

**İkili arama için liste neden sıralı olmalı?**

İkili arama, hedefi ortadaki öğeyle karşılaştırarak hangi yarıyı eleyeceğine karar verir. Bu karar yalnızca soldaki her şey daha küçük, sağdaki her şey daha büyükse doğrudur; bu da yalnızca sıralı veri için geçerlidir.

**İkili aramanın zaman karmaşıklığı nedir?**

İkili arama en kötü ve ortalama durumda O(log n), ortadaki öğenin hedef olduğu en iyi durumda ise O(1) sürede çalışır. Döngü tabanlı sürüm O(1) ek bellek kullanırken özyinelemeli sürüm çağrı yığını için O(log n) kullanır.

**Sırf ikili arama yapmak için veriyi sıralamaya değer mi?**

Sıralamanın maliyeti O(n log n)'dir; bu yüzden yalnızca aynı veriyi birçok kez arıyorsanız karşılığını verir. Tek bir arama için O(n) doğrusal arama daha hızlıdır; çok sayıda tam anahtarlı arama içinse çoğu zaman bir hash tablosu daha da iyidir.

---

Software Dictionary: https://softwaredictionary.org/tr · https://softwaredictionary.org/tr/llms.txt
