10-29-2012
|
#14
|
|
Prof. Dr. Sinsi
|
Sıralama Algoritmaları
Sıralama
Sıralama bir dizi elemanı, belirli bir özelliğine göre sıraya dizme işlemine verilen addır Bilgisayar bilimlerinin en çok incelenmiş konularından birisi sıralama algoritmalarıdır
Karışık halde: 9 4 2 8 3 1 5 6 7
Sıraya dizilmiş: 1 2 3 4 5 6 7 8 9
Sıralama, genellikle indekslerde, ansiklopedilerde kullanılır Ayrıca şuralarda da yaygındır: Katalog, bibliyografya, sözlük, kütüphane fişleri, ve bazı arama motorları
Tarrak Sıralaması
Tarrak Sıralaması, ilk defa 1991 yılının Nisan ayında Stephen Lacey ve Richard Box tarafından Byte dergisinde duyurulmuş yalın bir sıralama algoritmasıdır Kendisinden önce duyurulmuş kabarcık sıralaması algoritmasından başarılıdır ve karmaşıklıkta hızlı sıralama algoritmasıyla yarışır Algoritmanın ana fikri listenin sonundaki küçük değerli öğelerin sayısını azaltmaktır Kabarcık sıralaması algoritmasında sıralanacak listenin sonundaki küçük değerli öğelerin varlığı algoritmayı çok yavaşlattığı için tarak sıralamasında bu değerlerin sayısının azaltılması yoluna gidilmiştir
Kabarcık sıralaması algoritmasında iki öğe karşılaştırıldığında aralarındaki mesafe her zaman 1'dir Başka bir deyişle, kabarcık sıralaması her zaman ardışık iki değeri karşılaştırır Taraf sıralaması ise bunun aksine aralarındaki mesafe birden çok daha fazla olan öğeleri karşılaştırabilir (Kabuk sıralaması da aynı düşünceyle tasarlanmıştır ancak kabuk sıralaması kabarcık sıralamasının değil seçmeli sıralamanın bir türevidir )
Sözde Kodu
function combsort11(array input)
gap := input size //öğeler arasındaki aralığın başlangıç boyutunu belirle
loop until gap <= 1 or swaps = 0
//yeni bir tarama için aralığın boyutunu güncelle
if gap > 1
gap := gap / 1 3
if gap = 10 or gap = 9
gap := 11
end if
end if
i := 0
swaps := 0 // Açıklama için kabarcık sıralamasına bakınız
// giriş listesinin üzerinden tek bir "tarama"
loop until i + gap >= array size //Benzer yaklaşım için kabuk sıralamasına bakınız
if array[i] > array[i+gap]
swap(array[i], array[i+gap])
swaps := 1 // Aritmetik taşma düzeltmesi için
end if
i := i + 1
end loop
end loop
end function
|
|
|
|