Quick Sort, eleman kümesi içerisinde seçilen pivot sayının diğer sayılarla karşılaştırılarak büyüklük ve küçüklük durumuna göre pivot sayının sağ ve sol tarafına yerleştirilmesi sonucu oluşan sıralama algoritmasıdır. Quick sort algoritmasını Türkçe kaynaklarda ‘Hızlı Sıralama Algoritması’ olarak görebilirsiniz.
Quick sort algoritması, sürekli olarak aynı mantık ile eleman kümesinden pivot sayı seçip karşılaştırma yaptığı için recursive fonksiyon ile çözüme kavuşturulması daha uygundur.
En kötü durum performansı (worst case performance) O(n2)‘dir. En iyi durum performansı O(n log n)‘dir. Ortalama durum performansı ise yine O(n log n) kabul edilir.
Rastgele üretilmiş sayıları temsil eden çubukların quick sort algoritması ile nasıl sıralandığını aşağıda vermiş olduğum animasyonda görebilirsiniz.
Tanımlardan anlam çıkartmakta güçlük çeken arkadaşlarımızın bu animasyonları dikkatle incelemesini tavsiye ederim. Quick sort algoritmasını biraz daha somut bir örnekle inceleyelim.
9 elemanlı kümenin (dizi) quick sort diyagramı ile hangi adımlardan geçerek sıralandığını dikkatle incelediğimizde bölünen her birimin kendine özel pivot sayısı olduğunu daha net görmüş olduk.
Diyagramı adım adım takip ettiğinizde, inanıyorum ki çalışma mantığı kafanızda oturmaya başlamıştır. Şimdi 8 elemanlı dizimizin quick sort algoritması ile sıralanmasını animasyon üzerinde inceleyelim.
Animasyon içerisinde ilk olarak 3 sayısını pivot olarak belirledik. Kendinden küçükleri sol, büyükleri sağ tarafına aldık. Ardından 3 sayısının sol tarafında kalan sayılar içerisinde 1 sayısını pivot olarak belirledik ve sıralama yaptık. Sonraki adımda 3 sayısının sağ tarafında kalan sayılar içerisinde 4 sayısını pivot olarak belirledik. Yani işlemimiz dallanmaya başladı. Bu şekilde yalnızca pivot sayı tek kalana kadar işlemimizi sürdürüyoruz. Son hamlemizde ise sıralamanın tamamlandığını görmüş oluyoruz. Uygulama üzerinde görürsek daha yararlı olur herhalde.
C# Console Uygulaması
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
| static void Main( string [] args) { int [] dizi = new int [] { 6, 5, 3, 1, 8, 7, 2, 4 }; siralamayap(dizi, 0, dizi.Length - 1); } public static int parca( int [] dizi, int sol, int sag) { int i = sol, j = sag; int gecici; int pivot = dizi[(sol + sag) / 2]; while (i <= j) { while (dizi[i] < pivot) i++; while (dizi[j] > pivot) j--; if (i <= j) { gecici = dizi[i]; dizi[i] = dizi[j]; dizi[j] = gecici; i++; j--; } }; return i; } public static void siralamayap( int [] dizi, int sol, int sag) { int index = parca(dizi, sol, sag); if (sol < index - 1) siralamayap(dizi, sol, index - 1); if (index < sag) siralamayap(dizi, index, sag); }
|
betmatik
YanıtlaSilkralbet
betpark
mobil ödeme bahis
tipobet
slot siteleri
kibris bahis siteleri
poker siteleri
bonus veren siteler
NBXOT