Seçmeli sıralama

testwiki sitesinden
12.12, 21 Mayıs 2024 tarihinde imported>İmmoBot tarafından oluşturulmuş 699 numaralı sürüm (Kaynakça: kaynakça şablonu düzenleniyor..., değiştirildi: {{Kaynakça|30em}} → {{kaynakça}})
(fark) ← Önceki sürüm | Güncel sürüm (fark) | Sonraki sürüm → (fark)
Gezinti kısmına atla Arama kısmına atla

Şablon:Algoritma bilgi kutusu Seçmeli Sıralama, bilgisayar bilimlerinde kullanılan bir sıralama algoritmasıdır. Karmaşıklığı 𝒪(n2) olduğu için büyük listeler üzerinde kullanıldığında verim sağlamaz ve genel olarak benzeri olan eklemeli sıralamadan daha başarısızdır. Seçmeli sıralama yalın olduğu ve bazı durumlarda daha karmaşık olan algoritmalardan daha iyi sonuç verdiği için tercih edilebilir.

Seçmeli Sıralama'nın nasıl çalıştığını gösteren görüntü

Yöntem

Algoritma aşağıdaki gibi çalışır:

  1. Listedeki en küçük değerli öğeyi bul.
  2. İlk konumdaki öğeyle bulunan en küçük değerli öğenin yerini değiştir.
  3. Yukarıdaki adımları listenin ilk elemanından sonrası için (ikinci elemandan başlayarak) yinele.

Sözde Kodu

A sıralanacak öğeler kümesi, n ise A'daki öğe sayısıdır. Dizi 0 numaralı dizinle başlamaktadır.

for i  0 to n-2 do
    min  i
    for j  (i + 1) to n-1 do
        if A[j] < A[min]
            min  j
    swap A[i] and A[min]

Seçmeli Sıralama Algoritmasının Örnek Kodu

int enkucuk, yedek;
for (int i = 0; i < dizi.Length-1; i++)
{
    enkucuk = i;
    for (int j = i+1; j < dizi.Length; j++)
    {
        if (dizi[j]<dizi[enkucuk])
        {
            enkucuk = j;
        }
    }

    if (enkucuk != i)
    {
        yedek = dizi[i];
        dizi[i] = dizi[enkucuk];
        dizi[enkucuk] = yedek;
    }               
}
public int[] secmeliSiralama(int[] dizi)
{
    int enkucuk, yedek;
    for (int i = 0; i < dizi.Length - 1; i++)
    {
         enkucuk = i;
         for (int j = i + 1; j < dizi.Length; j++)
             if (dizi[j] < dizi[enkucuk])
                 enkucuk = j;
         if (enkucuk != i)
         {
             yedek = dizi[i];
             dizi[i] = dizi[enkucuk];
             dizi[enkucuk] = yedek;
         }
     }
     return dizi;
}

Karmaşıklık Hesabı

Seçmeli sıralama algoritmasının zaman karmaşıklığı hesaplanırken, yapılan karşılaştırmalar ve yer değiştirmeler dikkate alınır. Seçmeli sıralama algoritması n elemanlı bir listede, en küçük eleman için n1 tane karşılaştırma yapar, ikinci en küçük eleman için n2 tane karşılaştırma yapar, diğer elemanlar için karşılaştırma sayısı n3, n4, ..., 2, 1, 0 şeklinde azalarak devam eder. Listedeki bütün elemanlar için yapılan karşılaştırmaların toplamı

(n1)+(n2)+(n3)+(n4)+...+2+1+0=n(n1)/2yapar.

Her bir eleman için bir kez yer değiştirme yapılır, tüm liste için toplam n tane yer değiştirme işlemi yapılır. Hesaplamalar sonucunda elde edilen

n+n(n1)/2

değerlerinin asimptotik üst sınırı

O(n2)

değerini verir. Seçmeli sıralama algoritması listenin en küçük elemanının nerede olduğunu bilmediği ve her bir eleman için tüm elemanlarla karşılaştırma yaptığı için liste içindeki elemanların rastgele sıralanmış ya da eşit elemanlardan oluşmasını dikkate almaz, bu sebeple seçmeli sıralama algoritması her durumda

O(n2)

karmaşıklığıyla çalışır.[1]

Yukarıdaki şekil, 6 elemanlı içeriği karışık olarak verilmiş bir bir sayı dizisinin Seçmeli Sıralama algoritması kullanılarak nasıl küçükten-büyüğe doğru sıralandığını göstermektedir. 1. adımda dizinin ilk elemanı (6) alınır. Bu eleman diğer 5 eleman ile karşılaştırılır. Eğer bulunan eleman(1) ilk elemandan küçükse 1.elman ile yer değiştirilir. 2. adımda dizinin ikinci elemanı(3) alınır. Bu eleman kalan 4 eleman ile karşılaştırılır. Eğer bulunan eleman(2) ikinci elemandan küçükse 2. eleman ile yer değiştirilir ve bu işlem dizi sonuna kadar devam eder. Böylelikle dizi küçükten-büyüğe sıralanmış olur.

Diğer Sıralama Algoritmaları

Kaynakça

Şablon:Kaynakça

Dış bağlantılar

  1. Robert Sedgewick, Kevin Wayne, Algorithms 4th Edition, Addison-Wesley 2011 (chapter 2 p. 248)