Sıralama Algoritmaları - 7. Eklemeli Sıralama (Insertion Sort)

Eklemeli Sıralama (İngilizcesi: Insertion Sort), bilgisayar bilimlerinde kullanılan ve sıralı diziyi her adımda öğe öğe oluşturan bir sıralama algoritmasıdır.

İngilizce Adı Insertion Sort
Ortalama O(n + d)
En kötü O(n²)
Bellek O(1)
Kararlı mı? Evet
Yöntem Karşılaştırma ile Ekleme

Eklemeli Sıralama (İngilizcesi: Insertion Sort), bilgisayar bilimlerinde kullanılan ve sıralı diziyi her adımda öğe öğe oluşturan bir sıralama algoritmasıdır. Büyük dizilerle çalışıldığında hızlı sıralama, birleştirmeli sıralama ve yığın sıralaması gibi daha gelişmiş sıralama algoritmalarından daha verimsiz çalışır. Ancak buna karşın bazı artıları da vardır:

  • Uygulaması kolaydır.
  • Küçük Veri kümeleri üzerinde kullanıldığında verimlidir.
  • Çoğunluğu zaten sıralanmış olan diziler üzerinde kullanıldığında verimlidir.
  • Karmaşıklığı O(n²) olan seçmeli sıralama ve kabarcık sıralaması gibi çoğu yalın sıralama algoritmalarından daha verimlidir.
  • Kararlı bir sıralama algoritmasıdır (değeri eşit olan öğelerin asıl listedeki göreceli konumlarını değiştirmez)
  • Sıralanacak diziyi yerinde sıralar, ek bir bellek alanı gerektirmez.
  • Sıralanacak dizinin hepsinin algoritmanın girdisi olmasına gerek yoktur. Dizi parça parça da alınabilir ve sıralama işlemi sırasında diziye yeni veriler eklenebilir.

Kod örneği

public class EklemeliSiralama
{
    int[] dizi;
    public int[] Dizi
    {
        get { return dizi; }
        set { dizi = (int[])value.Clone(); }
    }
	
    public EklemeliSiralama()
    {
        //
        // TODO: Add constructor logic here
        //
    }

    public void Sirala()
    {
        Sort();
    }

    public override string ToString()
    {
        return "Eklemeli Sıralama";
    }

    void Sort()
    {
        int i, j, t;
        for (i = 1; i < Dizi.Length; i++)
        {
            j = i;
            t = Dizi[j];
            while (j > 0 && Dizi[j - 1] > t)
            {
                Dizi[j] = Dizi[j - 1];
                j--;
            }
            Dizi[j] = t;
        }
    }
}