Sallayıcı Sıralaması (Shaker Sort)
Yazan : Şadi Evren ŞEKER
Veri sıralama için kullanılan ve kabarcık sıralamasının (bubble sort) neredeyse aynısı olan sıralama algoritmasıdır (sort algorithm). Kabarcık sıralamasından tek farkı, kabarcık sıralaması tek yönlü olarak kabarcığı hareket ettirirken, sallayıcı sıralaması bir sağdan bir soldan iki yönden de sıralamaktadır. Bu sebeple çift yönlü kabarcık sıralaması (bidirectional bubble sort) ismi de verilmektedir.
Algoritmanın çalışması kısaca aşağıdaki örnek üzerinde anlatılmıştır:
Sıralanacak olan sayılarımız
5,7,2,9,6,1,3
olarak verilmiş olsun. Bu sayıların üzerinden bir kere geçiyoruz ve geçerken aldığımız ikilileri küçük-büyük sırasına sokarak ilerliyoruz:
1. adım : 5,7,2,9,6,1,3 2. adım : 5,2,7,9,6,1,3 3. adım : 5,2,7,9,6,1,3 4. adım : 5,2,7,6,9,1,3 5. adım : 5,2,7,6,1,9,3 6. adım : 5,2,7,6,1,3,9
Yukarıdaki 5 adımlık birinci geçişin normal bir kabarcık sıralamasından farkı yoktur ve normalde kabarcık sıralamasında bu işlem devam ederek sıralama işlemi bitene kadar tekrarlanır. Ancak sallama sıralamasında ikinci geçişte tekrar dizinin en solundaki 5 sayısından başlamak yerine, dizinin sonundaki 9 sayısından başlanır be büyükten küçüğe sıralanır:
1. adım : 5,2,7,6,1,3,9 2. adım : 5,2,7,6,1,3,9 3. adım : 5,2,7,1,6,3,9 4. adım : 5,2,1,7,6,3,9 5. adım : 5,1,2,7,6,3,9 6. adım : 1,5,2,7,6,3,9
Yukarıdaki geçişe dikkat edilirse ilk geçişin tersine sondan başa doğru kabarcık hareket ettirilmiştir. Özünde kabarcık sıralaması gibi çalışan sallayıcı sıralama algoritması sırasıyla bir soldan bir sağdan sıralama işlemine devam etmekte ve hiç sayı değişmeyene kadar işlemi tekrarlamaktadır. Algoritmanın performansı O(n2) olarak kabarcık sıralaması ile aynıdır. Kodu aşağıdaki şekilde yazılabilir:
do {
exchange = 0;
for(i = count - 1; i > 0; --i) {
if(items[i - 1] > items[ i ]) {
t = items[i - 1];
items[i - 1] = items[ i ];
items[ i ] = t;
exchange = 1;
}
}
for(i = 1; i < count; ++i) {
if(items[i - 1] > items[ i ]) {
t = items[i-1];
items[i - 1] = items[ i ];
items[ i ] = t;
exchange = 1;
}
}
} while(exchange);
/* değişim olmayana kadar devam et */
« Linear Programming (Doğrusal Programlama) | String Tokenizer ( Dizgi Parçalayıcı ) »
Yorumlar
Bilgisayar Kavramları üzerinde şu anda okumakta olduğunuz 'Sallayıcı Sıralaması (Shaker Sort)' isimli yazı 18 Dec 2008 tarihinde, saat: 21:09 'de Şadi Evren ŞEKER tarafından gönderilmiş, toplam 891 defa okunmuştur.
Benzer yazıları C/C++, algoritma analizi (teory of algorithms), veri yapıları kategorilerinden okuyabilirsiniz. Yazar ile irtibat kurmak için email gönderebilirsiniz. Yazıya yorum yapabilir ya da yapılan yorumları RSS 2.0 ile takibe alabilirsiniz.
Yazarın Kitabı
Bu yazının yazarı Şadi Evren ŞEKER'in son çıkan kitabı "Programlama ve Veri Yapılarına giriş (C, C++ ve JAVA ile)" hakkında bilgi almak için Buraya tıklayabilirsiniz.
Eklenen Son Yazılar
- Visual Basic ile Gösterici (Pointer) Kullanımı
- Hasse Çizgeleri (Hasse Diagrams)
- Zeki Vekiller (Akıllı Ajanlar, Intelligent Agents, Zeki Etmenler )
- Integral Kriptoanalizi ( Toplam Tecessüsü , Integral Cryptoanalysis)
- Diferansiyel Kriptoanalizi ( Fark Tecessüsü , Differential Cryptoanalysis)
- Sierpinski Üçgeni (Sierpinski Triangle)
- C ile programlamaya giriş final sınavı çözümleri
- Çok Seviyeli Sıralar (Multi Level Queues)
- Çift Özetleme (Double Hashing)
- İkinci Dereceden Sondalama (Quadratic Probing)
Yapılan Son Yorumlar
- Şadi Evren ŞEKER: Sıralama işleminiz poligonu...
- Şadi Evren ŞEKER: bahsettiğiniz sıralama algoritması...
- Abdurrahman ulusoy: merhaba hocam. gelişigüzel...
- Oguz Okutan: Merhaba hocam.. Fonksiyonlarda degere göre...
- Şadi Evren ŞEKER: Null, NULL, nil veya null olarak...
- Fatih Kabakci: hocam merhabalar,...
- kara: Çok güzel anlatılmış gerçekten teşekkürler...
- Şadi Evren ŞEKER: Bahsettiğiniz şekil dönüşümü...
- Caner: Kullanıcıdan açı girdisi almıyorsanız...
- Furkan Yediyildiz: Algoritmanin mantigi cok güzel...
- havva: çok sağolun çok güzel açıklamalar var tşk...
- Şadi Evren ŞEKER: typedef komutu, bir yapıdan yeni bir...
- fatih kabakci: hocam ben structures ile ilgili bir sorum...
- Şadi Evren ŞEKER: evet, yukarıda açıklanan, herhangi...
- Abdurrahman ulusoy: fi açısından teta kadar döndürme...
- Şadi Evren ŞEKER: Hayır yok, bir noktanın, herhangi...
- Abdurrahman ulusoy: Bu durumda yukarıdaki formüllerin...
- Abdurrahman ulusoy: Merhaba hocam Üstteki mesajımda...
- mustafa ekmekcioğlu: merhaba şadi bey ben hacettepe...
- Şadi Evren ŞEKER: Talebiniz üzerine...
Yakın Yazılar
Sallayıcı Sıralaması (Shaker Sort)
Sıralama Algoritmaları (Sorting Algorithms)
Buket Sıralaması (Bucket Sort)
Sokma Sıralaması (Ekleme Sıralaması, Insertion Sorting)
Serseri sıralaması (Stooge Sort)
Harici Sıralama (External Sort)
Yerleşim Sıralaması (Topological Sort, İlinge Sıralaması)
Yığınlama Sıralaması (Heap Sort)
Birleştirme Sıralaması (Merge Sort)
Sığ Öncelikli Arama (Breadth First Search , BFS)
Derin Öncelikli Arama (Depth First Search , DFS)
Kabarcık Sıralaması (Baloncuk sıralaması, Bubble Sort)
Priority Queue (Öncelik Sırası, Rüçhan Sırası)
Bağlantılar