canlı ~/duyurular $
Algoritma müfredatı
ünite 4 · Diziler · ders 4.4

Sıralama: kabarcık ve seçmeli

Komşuları karşılaştırıp yer değiştir; ya da her turda en küçüğü seçip öne al.

10 dk 15 / 22

Sıralama, algoritmaların klasik problemidir. İki basit yöntem:

Kabarcık (bubble) sıralama

Yan yana iki elemana bak; soldaki büyükse takas et. Bir turda en büyük eleman sona "kabarır". Tur sayısı kadar tekrarla. Basit ama yavaş: n elemanda yaklaşık n² karşılaştırma.

Seçmeli (selection) sıralama

Listenin geri kalanındaki en küçüğü bul, ilk boş yere koy. Sonra ikinci en küçüğü… "En büyüğü bul" kalıbını arka arkaya uygulamaktan başka bir şey değil.

Hangisi?

İkisi de küçük listeler ve öğrenmek için iyi. Gerçek programlarda hazır Array.Sort kullanılır — ama neyi çağırdığını bilmek için bir kez elle yapmalısın.

Takası "Değişken ve atama" dersinden hatırla: üçüncü kutu şart.
akış şeması elips: başla/bitir · dikdörtgen: işlem · paralelkenar: girdi/çıktı · baklava: karar
flowchart TD
  A[tur = 0] --> B{tur #lt; n-1 ?}
  B -- Evet --> C[i = 0]
  C --> D{i #lt; n-1-tur ?}
  D -- Evet --> E{d#91;i#93; #gt; d#91;i+1#93; ?}
  E -- Evet --> F[takas et]
  E -- Hayır --> G[i = i + 1]
  F --> G
  G --> D
  D -- Hayır --> H[tur = tur + 1]
  H --> B
  B -- Hayır --> I([Sıralı])
sözde kod adımlar
1tur ← 02İKEN tur < n − 13  i ← 04  İKEN i < n − 1 − tur5    EĞER d[i] > d[i+1] İSE d[i] ile d[i+1] takas6    i ← i + 17  DÖNGÜ SONU8  tur ← tur + 19DÖNGÜ SONU
aynısı C# ile C#
1int[] d = { 5, 1, 4, 2 };2for (int tur = 0; tur < d.Length - 1; tur++)3{4    for (int i = 0; i < d.Length - 1 - tur; i++)5    {6        if (d[i] > d[i + 1])7        {8            int g = d[i]; d[i] = d[i + 1]; d[i + 1] = g;9        }10    }11}12Console.WriteLine(string.Join(" ", d));
adım adım izleme

Kutuların her adımdaki değeri. Kağıtta izleme tablosu tutarken tam bunu yaparsın.

#satırdizinot
1 tur 0: 5>1 takas, 5>4 takas, 5>2 takas 1 4 2 5 En büyük (5) sona kabardı
2 tur 1: 1>4 hayır, 4>2 takas 1 2 4 5 4 yerine oturdu
3 tur 2: 1>2 hayır 1 2 4 5 Sıralı
senin sıran

[7, 3, 9, 1] dizisini önce kabarcık, sonra seçmeli sıralama ile elle sırala; her turdan sonra diziyi yaz. Kaç takas yaptın? Hangi yöntem daha az takas yapıyor?

Canlı Kod'da C# ile dene
kendini sına Kabarcık sıralamada bir turda hiç takas olmadıysa ne söyleyebiliriz?
Dizi zaten sıralıdır; kalan turlar gereksiz. Bu kontrolü ekleyip erken çıkmak algoritmayı hızlandırır.
İşaret bu tarayıcıda kalır. XP için giriş yap — her ders +15 XP.