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.kblKaynak 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("")