# ╔═══════════════════════════════════════════════════════════════════╗ # ║ İKİLİ ARAMA — arama aralığı her adımda YARIYA iner ║ # ║ Aralık yeşil, orta nokta sarı, elenen bölge soluk çizilir. ║ # ╚═══════════════════════════════════════════════════════════════════╝ kullan kaba.sistem fonksiyon renkli(yazi: metin, renk: sayi): don "\033[38;5;" + metin(renk) + "m" + yazi + "\033[0m" fonksiyon ekrani_temizle(): yazdir("\033[H\033[2J") fonksiyon durumu_ciz(dizi, sol: sayi, sag: sayi, orta: sayi, hedef: sayi, adim: sayi): ekrani_temizle() yazdir("") yazdir(renkli(" İKİLİ ARAMA — hedef: " + metin(hedef), 81)) yazdir(renkli(" " + "─".tekrarla(52), 238)) satir = " " i = 0 iken i < dizi.uzunluk(): kutu = metin(dizi[i]) eger dizi[i] < 10: kutu = " " + kutu eger i == orta: satir = satir + renkli("[" + kutu + "]", 220) degilse: eger i >= sol: eger i <= sag: satir = satir + renkli(" " + kutu + " ", 78) degilse: satir = satir + renkli(" " + kutu + " ", 238) degilse: satir = satir + renkli(" " + kutu + " ", 238) i = i + 1 yazdir(satir) yazdir(renkli(" " + "─".tekrarla(52), 238)) kalan = sag - sol + 1 eger kalan < 0: kalan = 0 yazdir(renkli(" adım: " + metin(adim) + " kalan aday: " + metin(kalan), 245)) uyu(700) # ── Sıralı veri ─────────────────────────────────────────────────────── dizi = [] deger = 2 n = 0 iken n < 16: dizi.ekle(deger) deger = deger + rastgele.sayi(2, 6) n = n + 1 hedef = dizi[rastgele.sayi(0, 15)] # ── Algoritma ───────────────────────────────────────────────────────── # Her adımda ortadaki değere bakılır; hedef ondan küçükse sağ yarı, # büyükse sol yarı tümüyle elenir. 16 öğe en çok 4 adımda taranır. sol = 0 sag = dizi.uzunluk() - 1 adim = 0 bulundu = 0 - 1 iken sol <= sag: orta =(sol + sag) // 2 adim = adim + 1 durumu_ciz(dizi, sol, sag, orta, hedef, adim) eger dizi[orta] == hedef: bulundu = orta sol = sag + 1 degilse: eger dizi[orta] < hedef: sol = orta + 1 degilse: sag = orta - 1 yazdir("") eger bulundu >= 0: yazdir(renkli(" ✓ " + metin(hedef) + " değeri " + metin(bulundu) + ". sırada, " + metin(adim) + " adımda bulundu.", 78)) yazdir(renkli(" Doğrusal arama en kötü " + metin(dizi.uzunluk()) + " adım isterdi.", 245)) degilse: yazdir(renkli(" ✗ " + metin(hedef) + " dizide yok (" + metin(adim) + " adım).", 203)) yazdir("")