KABAFORCEGeliştirici KabaOS'u edinin

Algoritmalar · 108 satır

Sıralama yarışı

Kabarcık, seçmeli ve eklemeli sıralamanın karşılaştırma sayıları çubuk grafikle yarışır.

Ö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 02_siralama_yarisi.kbl

Kaynak kod

02_siralama_yarisi.kbl
# ╔═══════════════════════════════════════════════════════════════════╗
# ║  SIRALAMA YARIŞI — üç algoritma, aynı dizi, kaç karşılaştırma?    ║
# ║  Deneme · Seçmeli · Eklemeli. Sonuçlar çubuk grafikle.          ║
# ╚═══════════════════════════════════════════════════════════════════╝
kullan kaba.sistem

fonksiyon renkli(yazi: metin, renk: sayi):
    don "\033[38;5;" + metin(renk) + "m" + yazi + "\033[0m"

fonksiyon baslik(yazi: metin):
    yazdir("")
    yazdir(renkli("  " + yazi, 81))
    yazdir(renkli("  " + "─".tekrarla(52), 238))

# ── Deneme: komşuları karşılaştır, büyüğü sona taşı ─────────────────
fonksiyon kabarcik(kaynak):
    d = kaynak
    sayac = 0
    tur = 0
    iken tur < d.uzunluk():
        i = 0
        iken i < d.uzunluk() - tur - 1:
            sayac = sayac + 1
            eger d[i] > d[i + 1]:
                g = d[i]
                d[i] = d[i + 1]
                d[i + 1] = g
            i = i + 1
        tur = tur + 1
    don sayac

# ── Seçmeli: kalan en küçüğü bul, başa al ─────────────────────────────
fonksiyon secmeli(kaynak):
    d = kaynak
    sayac = 0
    i = 0
    iken i < d.uzunluk():
        en_kucuk = i
        j = i + 1
        iken j < d.uzunluk():
            sayac = sayac + 1
            eger d[j] < d[en_kucuk]:
                en_kucuk = j
            j = j + 1
        g = d[i]
        d[i] = d[en_kucuk]
        d[en_kucuk] = g
        i = i + 1
    don sayac

# ── Eklemeli: her öğeyi sıralı kısma yerleştir ────────────────────────
fonksiyon eklemeli(kaynak):
    d = kaynak
    sayac = 0
    i = 1
    iken i < d.uzunluk():
        deger = d[i]
        j = i - 1
        iken j >= 0:
            sayac = sayac + 1
            eger d[j] <= deger:
                j = 0 - 1
            degilse:
                d[j + 1] = d[j]
                j = j - 1
        d[j + 1] = deger
        i = i + 1
    don sayac

fonksiyon sonuc_ciz(ad: metin, sayac: sayi, en_fazla: sayi, renk: sayi):
    genislik = 34
    dolu = sayac * genislik // en_fazla
    cubuk = "█".tekrarla(dolu) + "·".tekrarla(genislik - dolu)
    yazdir("  " + renkli(ad, renk) + "  " + renkli(cubuk, renk) + renkli("  " + metin(sayac), 245))

# ── Yarış ─────────────────────────────────────────────────────────────
veri = []
n = 0
iken n < 40:
    veri.ekle(rastgele.sayi(1, 500))
    n = n + 1

baslik("SIRALAMA YARIŞI — " + metin(veri.uzunluk()) + " rastgele sayı")

a = kabarcik(veri)
b = secmeli(veri)
c = eklemeli(veri)

en_fazla = a
eger b > en_fazla:
    en_fazla = b
eger c > en_fazla:
    en_fazla = c

yazdir("")
sonuc_ciz("Deneme ", a, en_fazla, 203)
sonuc_ciz("Seçmeli  ", b, en_fazla, 220)
sonuc_ciz("Eklemeli ", c, en_fazla, 78)
yazdir(renkli("  " + "─".tekrarla(52), 238))
yazdir(renkli("  Karşılaştırma sayısı — az olan daha verimli.", 245))

# Dilin kendi sıralaması: aynı işi tek satırda yapar.
hazir = veri
hazir.sirala()
yazdir("")
yazdir(renkli("  Dilin kendi sıralaması:  veri.sirala()", 81))
yazdir(renkli("  ilk 8: " + metin(hazir[0]) + ", " + metin(hazir[1]) + ", " + metin(hazir[2]) + ", " + metin(hazir[3]) + ", " + metin(hazir[4]) + ", " + metin(hazir[5]) + ", " + metin(hazir[6]) + ", " + metin(hazir[7]), 245))
yazdir("")