KABAFORCEGeliştirici KabaOS'u edinin

Algoritmalar · 83 satır

Sıralama animasyonu

Kabarcık sıralaması: karşılaştırılan çift sarı, yerine oturan kuyruk yeşil yanar.

Önizleme · 0.6.0 — dil 1.0 öncesidir; sözdizimi ve kütüphane değişebilir. Buradaki her örnek derlenerek sınanır.

Çalıştırın

Uçbirim
kabalang calistir 01_siralama_animasyonu.kbl

Kaynak kod

01_siralama_animasyonu.kbl
# ╔═══════════════════════════════════════════════════════════════════╗
# ║  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("")