Couting Sort (Saymalı Sıralama) Algoritması
Selamün Aleyküm Arkadaşlar;
Saymalı sıralama algoritması verilerin aralığını kullanarak sıralama yapar. Saymalı sıralama algoritması Harold H. Seward tarafından 1954 yılında yazılmıştır.
Elimizde şu şekilde bir A dizisi olsun:
İlk önce dizideki en büyük değer bulunur. Dizideki en büyük değer 7’dir. 7 + 1 uzunluğunda bir başka dizi tanımlanır. Biz bunu B dizisi olarak tanımlayalım. Sonra B dizisinin tüm değerleri 0 yapılır.
Sonra A dizisiyle aynı uzunlukta başka bir dizi tanımlanır. Biz bunu C dizisi olarak tanımlayalım.
Sonra A dizisi birinci elemanından itibaren seçilir. Birinci elemanın değeri B dizinde index numarasını gösterir. B dizisindeki veri +1 arttırılır.
Sonra B dizisine n = n + (n-1) uygulanır. Yani bir elemanın değeri bir önceki elemanın değeriyle toplanır ve elemana yazılır.
A dizisinin sondan itibaren elemanı seçilir. Değeri B dizisinin indeksini verir. B elemanının değerinin bir eksiği, C dizisindeki indeksi verir. C dizisindeki (B elemanının değeri – 1) indeksine, seçilen elemanın değeri yazılır. B elemanının değeri 1 azaltılır.
Böylelikle A dizisindeki elemanlar, C dizisinde sıralanmış olur.
C# Kod yapısı da aşağıdaki gibidir.
int[] a = new int[]{7, 3, 5, 1};
//En büyük değerin indeksini al
int enb = 0;
for (int i = 1; i < a.Length; i++)
{
if (a[i] > a[enb])
enb = i;
}
//B ve C dizilerini tanımla
int[] b = new int[a[enb] + 1];
int[] c = new int[a.Length];
//dizideki elemanları say
for (int i = 0; i < a.Length; i++)
{
b[a[i]] += 1;
}
//n = n + (n - 1)
for (int i = 1; i < b.Length; i++)
{
b[i] += b[i - 1];
}
//C dizisine sırala
for (int i = a.Length - 1; i >= 0; i--)
{
c[b[a[i]]-- - 1] = a[i];
}
Proje dosyasını buradan indirebilirsiniz.
Hayırlı günler, sağlıcakla kalın.
Bu döküman www.ibasoglu.com’a aittir. Kaynak belirtmek suretiyle alıntı yapılabilir.






16 Nisan 2014 @ 00:54
Başarılı 🙂
16 Nisan 2014 @ 12:15
EyvaAllah Mustafa. 🙂