11 - Sıralama Algoritmaları
2025
Sıralama algoritması, bir dizinin/listenin öğelerini belirli bir sıraya göre düzenlemek için kullanılır. Örnekte artan sırada sıralama yapılmış.
Bir döngü içerisinde, her adımda dizideki en küçük değerli sayıyı bulan, bulduğu en küçük sayıyı döngüdeki mevcut sayıyla yer değiştiren algoritmadır.
Seçmeli Sıralama da denilebilir.
3.Her iterasyondan sonra en küçük eleman, sıralanmamış listenin önüne yerleştirilir.
Alıştırma Sorusu:
35, 40, 25, 10, 45 sayıları seçerek sıralama algoritmasıyla küçükten büyüğe sıralanmak isteniyor. Kaçıncı adımda sayılar sıralanmış olur?
https://gist.github.com/ecylmz/68f7646b1805c623db1b553867ef8585#file-selection-sort-c
Sıralanacak dizinin üzerinde sürekli ilerlerken her defasında iki öğenin birbiriyle karşılaştırılıp, karşılaştırılan öğelerin yanlış sırada olmaları durumunda yerlerinin değiştirilmesi mantığına dayanan, herhangi bir değişiklik yapılmayıncaya kadar dizinin başına dönerek kendisini yineler.
Elemanları artan sırada sıralamaya çalıştığımızı varsayalım.
Aynı süreç kalan iterasyonlar için de devam eder.
Her iterasyondan sonra, sıralanmamış elemanlar arasındaki en büyük eleman en sona yerleştirilir.
Her yinelemede, karşılaştırma sıralanmamış son öğeye kadar gerçekleşir.
Sıralanmamış tüm elemanlar doğru konumlarına yerleştirildiğinde dizi sıralanmış olur.
https://gist.github.com/ecylmz/68f7646b1805c623db1b553867ef8585#file-bubble-sort-c
Ekleme sıralaması, sıralanmamış bir elemanı her iterasyonda uygun yerine yerleştiren bir sıralama algoritmasıdır.
Ekleme sıralaması, bir kart oyununda elimizdeki kartları sıralamamıza benzer şekilde çalışır.
İlk kartın zaten sıralanmış olduğunu varsayıyoruz, sonra sıralanmamış bir kart seçiyoruz. Eğer sıralanmamış kart eldeki karttan büyükse sağa, değilse sola yerleştirilir. Aynı şekilde diğer sıralanmamış kartlar da alınır ve doğru yerlerine konur.
Benzer bir yaklaşım ekleme sıralaması tarafından da kullanılır.
Aşağıdaki diziyi sıralamamız gerektiğini varsayalım.
Dizideki ilk elemanın sıralı olduğu varsayılır. İkinci elemanı alın ve ayrı olarak anahtarda(key)
saklayın.
Anahtar(key)
ile ilk elemanı karşılaştırır. İlk eleman anahtardan büyükse, anahtar
ilk elemanın önüne yerleştirilir.
Şimdi, ilk iki öğe sıralı halde!
Üçüncü elemanı alın ve solundaki elemanlarla karşılaştırın. Kendisinden küçük olan elemanın hemen arkasına yerleştirin. Eğer ondan daha küçük bir eleman yoksa, dizinin başına yerleştirin.
https://gist.github.com/ecylmz/68f7646b1805c623db1b553867ef8585#file-insertion-sort-c
Bir diziyi sıralamak için böl ve fethet yaklaşımını kullanan ve her adımda bir pivot elemanı seçerek diziyi pivot elemanının solunda küçük, sağında büyük olacak şekilde ikiye ayırarak devam eden bir sıralama algoritmasıdır.
Parçala ve fethet olarak da adlandırılan bu algoritma ile problem ufak ve çözülmesi nispeten daha kolay olan parçalara bölünür. Her parça ayrı ayrı çözüldükten sonra sonuçlar birleştirilerek genel problemin çözümü elde edilir.
Pivot Elemanı Seçin
Pivot elemanın farklı konumlardan seçildiği farklı Hızlı Sıralama varyasyonları vardır. Burada, dizinin en sağdaki elemanını pivot eleman olarak seçeceğiz.
Şimdi dizinin elemanları, pivottan küçük olan elemanlar sola ve pivottan büyük olan elemanlar sağa gelecek şekilde yeniden düzenlenir.
İşte diziyi nasıl yeniden düzenlediğimiz:
Pivot elemanlar yine sol ve sağ alt parçalar için ayrı ayrı seçilir. Ve 2. adım tekrarlanır.
Alt diziler, her alt dizi tek bir elemandan oluşana kadar bölünür. Bu noktada, dizi zaten sıralanmıştır.
https://gist.github.com/ecylmz/68f7646b1805c623db1b553867ef8585#file-quick-sort-c
Sıralanmak istenen verimiz: 5,7,2,9,6,1,3,7
olsun. Birleştirme sıralamasının çalışması bu örnek dizi üzerinde adım adım gösterilmiştir. Öncelikle bölme adımları gelir.
5,7,2,9 ve 6,1,3,7
5,7 ; 2,9 ; 6,1 ; 3,7
5,7 ; 2,9 ; 1,6 ; 3,7
2,5,7,9 ve 1,3,6,7
1,2,3,5,6,7,7,9
https://gist.github.com/ecylmz/68f7646b1805c623db1b553867ef8585#file-merge-sort-c