İçeriğe geç
Educora
Orta9–11. sınıf18 dk28 / 59

Sıralama algoritmaları

Kabarcık, seçmeli ve eklemeli sıralamanın nasıl çalıştığını öğren ve bu algoritmaların hızını karşılaştır.

Kendini test et
Bu derste öğreneceklerin
  • Sıralamanın neden gerekli olduğunu açıklamak
  • Kabarcık, seçmeli ve eklemeli sıralamayı adım adım uygulamak
  • Algoritmaları yaptıkları karşılaştırma sayısına göre karşılaştırmak

Telefonundaki kişiler alfabetik sırayla, bir oyundaki skor tablosu puana göre, çevrim içi mağazadaki ürünler de fiyata göre dizilir. Bütün bu durumlarda bilgisayar sıralama yapar, yani öğeleri belirli bir kurala göre dizer. Üstelik önceki derste gördüğümüz gibi hızlı ikili arama yalnızca sıralı bir listede çalışır. Peki bilgisayar bir listeyi nasıl sıralar?

Tanım
Sıralama

Bir listenin elemanlarını belirli bir kurala göre, örneğin küçükten büyüğe, büyükten küçüğe ya da alfabetik olarak yeniden dizmek.

Kabarcık sıralaması

Kabarcık sıralamasında komşu elemanlar ikişer ikişer karşılaştırılır: soldaki sağdakinden büyükse yer değiştirirler. Listenin baştan sona bir kez gezilmesine geçiş denir. Her geçişten sonra kalanların en büyüğü, sudaki bir kabarcık gibi listenin sonuna “yükselir”. Bir geçişte hiç yer değiştirme olmazsa liste zaten sıralanmıştır.

Örnek: kabarcık sıralaması

[5, 1, 4, 2] listesini kabarcık sıralamasıyla küçükten büyüğe sırala.

Çözümü göster
1. geçiş:
5 > 1 → yer değiştir: [1, 5, 4, 2]
5 > 4 → yer değiştir: [1, 4, 5, 2]
5 > 2 → yer değiştir: [1, 4, 2, 5] — 5 yerine oturdu.
2. geçiş:
1 < 4 → değişiklik yok
4 > 2 → yer değiştir: [1, 2, 4, 5] — 4 yerine oturdu.
3. geçiş:
1 < 2 → değişiklik yok. Yer değiştirme olmadı; liste sıralı: [1, 2, 4, 5].
Toplam 3 + 2 + 1 = 6 karşılaştırma yapıldı.
Etkileşimli
Simülasyon yükleniyor…
Çubukların nasıl karşılaştırıldığını ve en uzun çubuğun her geçişte sona nasıl “yükseldiğini” izle.
Python
def bubble_sort(a):
    a = a[:]
    n = len(a)
    for i in range(n - 1):
        swapped = False
        for j in range(n - 1 - i):
            if a[j] > a[j + 1]:
                a[j], a[j + 1] = a[j + 1], a[j]
                swapped = True
        if not swapped:
            break
    return a

print(bubble_sort([5, 1, 4, 2]))
print(sorted(['Murad', 'Aysel', 'Leyla', 'Elvin']))
▸ Beklenen çıktı
[1, 2, 4, 5]
['Aysel', 'Elvin', 'Leyla', 'Murad']
swapped değişkeni bir geçişte yer değiştirme olup olmadığını hatırlar; olmadıysa algoritma erken durur. Python'un hazır sorted() fonksiyonu metinleri de alfabetik sıraya dizer.

Seçmeli sıralama

Seçmeli sıralamada listenin sıralanmamış kısmındaki en küçük eleman bulunur ve o kısmın ilk elemanıyla yer değiştirilir. Böylece soldaki sıralı kısım her adımda bir eleman büyür.

Örnek: seçmeli sıralama

[29, 10, 14, 37, 13] listesini seçmeli sıralamayla küçükten büyüğe sırala.

Çözümü göster
1. adım: en küçük eleman 10'dur; onu 29 ile değiştiririz → [10, 29, 14, 37, 13]
2. adım: [29, 14, 37, 13] kısmında en küçük 13'tür; onu 29 ile değiştiririz → [10, 13, 14, 37, 29]
3. adım: [14, 37, 29] kısmında en küçük 14'tür ve zaten yerindedir.
4. adım: [37, 29] kısmında en küçük 29'dur; onu 37 ile değiştiririz → [10, 13, 14, 29, 37].

Eklemeli sıralama

Eklemeli sıralama, bir oyuncunun elindeki kartları dizmesine benzer: sıradaki kartı alır ve zaten sıralı olan kartların arasına doğru yere “ekler”. Liste neredeyse sıralıysa bu yöntem çok hızlı çalışır.

Örnek: eklemeli sıralama

[4, 3, 5, 1] listesini eklemeli sıralamayla sırala.

Çözümü göster
Başta sıralı kısımda yalnızca 4 vardır.
3'ü alırız: 3 < 4, onu 4'ün önüne koyarız → [3, 4, 5, 1]
5'i alırız: 5 > 4, yerinde kalır → [3, 4, 5, 1]
1'i alırız: 5, 4 ve 3 birer yer sağa kayar, 1 başa geçer → [1, 3, 4, 5].
Etkileşimli
Simülasyon yükleniyor…
Her yeni elemanın sıralı kısımda kendi yerine nasıl eklendiğini izle.

Hangi algoritma daha hızlı?

Sıralamanın hızı genellikle karşılaştırma sayısıyla ölçülür. Üç basit yöntemin her biri en kötü durumda yaklaşık n(n − 1) / 2 karşılaştırma yapar: n = 10 için 45, n = 1000 için ise 499.500. Liste 10 kat uzarsa iş yaklaşık 100 kat artar!

K = n(n − 1) / 2K = n(n − 1) / 2
burada:
  • Ken kötü durumda karşılaştırma sayısı
  • nlistedeki eleman sayısı
YöntemFikirEn kötü durumZaten sıralı liste
Kabarcıkkomşuları karşılaştırıp yer değiştirmekn(n − 1) / 2n − 1 (erken durmayla)
Seçmelien küçüğü bulup başa koymakn(n − 1) / 2n(n − 1) / 2
Eklemeliher elemanı sıralı kısma eklemekn(n − 1) / 2n − 1
Karşılaştırma sayısı (n = eleman sayısı)

Önemli noktalar

  • Sıralama elemanları bir kurala göre dizer; ikili arama için sıralı liste gerekir.
  • Kabarcık sıralaması komşuları karşılaştırır; her geçişten sonra en büyük eleman sona gider.
  • Seçmeli sıralama her seferinde en küçük elemanı bulup sıralanmamış kısmın başına koyar.
  • Eklemeli sıralama her elemanı sıralı kısımda kendi yerine ekler.
  • Basit yöntemler en kötü durumda n(n − 1) / 2 karşılaştırma yapar; büyük listeler için daha hızlı algoritmalar vardır.

Kendini test et

10 soru. Her doğru cevap XP kazandırır.

1 / 10
Kabarcık sıralamasında hangi elemanlar karşılaştırılır?