# ╔═══════════════════════════════════════════════════════════════════╗ # ║ SIRALAMA ANİMASYONU — Kabarcık Sıralaması ║ # ║ Her adımda dizi yeniden çizilir: karşılaştırılan çift SARI, ║ # ║ yerine oturmuş kuyruk YEŞİL yanar. ║ # ║ ║ # ║ Çalıştır: kabalang calistir 01_siralama_animasyonu.kbl ║ # ╚═══════════════════════════════════════════════════════════════════╝ kullan kaba.sistem # ── Terminal efektleri ──────────────────────────────────────────────── # ANSI kaçış dizileri doğrudan yazdırılır: renk, imleç, ekran temizleme. # ⚠️ Yardımcı fonksiyonlar KULLANILMADAN ÖNCE tanımlanır. 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 cubuk(deger: sayi, renk: sayi): dolu = "█".tekrarla(deger) bos = "·".tekrarla(20 - deger) don renkli(dolu, renk) + renkli(bos, 238) # ── Çizim ───────────────────────────────────────────────────────────── fonksiyon diziyi_ciz(dizi, sol: sayi, sag: sayi, yerlesmis: sayi, takas: sayi, karsilastirma: sayi): ekrani_temizle() yazdir("") yazdir(renkli(" KABARCIK SIRALAMASI", 81)) yazdir(renkli(" " + "─".tekrarla(44), 238)) i = 0 iken i < dizi.uzunluk(): renk = 244 eger i >= yerlesmis: renk = 78 eger i == sol: renk = 220 eger i == sag: renk = 220 yazdir(" " + cubuk(dizi[i], renk) + renkli(" " + metin(dizi[i]), renk)) i = i + 1 yazdir(renkli(" " + "─".tekrarla(44), 238)) yazdir(renkli(" karşılaştırma: " + metin(karsilastirma) + " takas: " + metin(takas), 245)) uyu(55) # ── Veri ────────────────────────────────────────────────────────────── dizi = [] n = 0 iken n < 14: dizi.ekle(rastgele.sayi(1, 20)) n = n + 1 # ── Algoritma ───────────────────────────────────────────────────────── # Kabarcık sıralaması: komşu çiftleri karşılaştır, gerekirse takas et. # Her turda en büyük eleman sona "kabarır", o yüzden kuyruk kısalır. takas = 0 karsilastirma = 0 yerlesmis = dizi.uzunluk() tur = 0 iken tur < dizi.uzunluk(): i = 0 hareket_var = yanlis iken i < dizi.uzunluk() - tur - 1: karsilastirma = karsilastirma + 1 diziyi_ciz(dizi, i, i + 1, yerlesmis, takas, karsilastirma) eger dizi[i] > dizi[i + 1]: gecici = dizi[i] dizi[i] = dizi[i + 1] dizi[i + 1] = gecici takas = takas + 1 hareket_var = dogru i = i + 1 yerlesmis = yerlesmis - 1 # Hiç takas olmadıysa dizi zaten sıralıdır — erken çıkış. eger hareket_var == yanlis: yerlesmis = 0 tur = dizi.uzunluk() tur = tur + 1 diziyi_ciz(dizi, 0 - 1, 0 - 1, 0, takas, karsilastirma) yazdir("") yazdir(renkli(" ✓ " + metin(dizi.uzunluk()) + " sayı, " + metin(karsilastirma) + " karşılaştırma, " + metin(takas) + " takas.", 78)) yazdir("")