- 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?
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.
[5, 1, 4, 2] listesini kabarcık sıralamasıyla küçükten büyüğe sırala.
Çözümü gösterÇözümü gizle
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ı.
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.
[29, 10, 14, 37, 13] listesini seçmeli sıralamayla küçükten büyüğe sırala.
Çözümü gösterÇözümü gizle
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.
[4, 3, 5, 1] listesini eklemeli sıralamayla sırala.
Çözümü gösterÇözümü gizle
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].
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!
- Ken kötü durumda karşılaştırma sayısı
- nlistedeki eleman sayısı
| Yöntem | Fikir | En kötü durum | Zaten sıralı liste |
|---|---|---|---|
| Kabarcık | komşuları karşılaştırıp yer değiştirmek | n(n − 1) / 2 | n − 1 (erken durmayla) |
| Seçmeli | en küçüğü bulup başa koymak | n(n − 1) / 2 | n(n − 1) / 2 |
| Eklemeli | her elemanı sıralı kısma eklemek | n(n − 1) / 2 | n − 1 |
Ö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.