Quicksort Algoritmasının Açıklaması [Örnekle]
Yayınlanan: 2020-12-15Hızlı Sıralama, Merge Sort'ta da kullanılan kavram olan Böl ve Yönet algoritması kavramına dayanmaktadır . Aradaki fark, hızlı sıralamada en önemli veya önemli iş diziyi alt dizilere ayırırken (veya bölerken) yapılırken, birleştirme sıralama durumunda tüm büyük iş alt dizileri birleştirirken gerçekleşir . Hızlı sıralama için birleştirme adımı önemsizdir.
Hızlı Sıralama aynı zamanda bölüm değiştirme sıralama olarak da adlandırılır . Bu algoritma, verilen sayı dizisini üç ana bölüme ayırır:
- Pivot öğeden daha küçük öğeler
- Pivot öğesi
- Pivot öğesinden daha büyük öğeler
Pivot eleman, verilen numaralardan birçok farklı şekilde seçilebilir:
- İlk elemanın seçilmesi
- Son elemanı seçme (gösterilen örnek)
- Herhangi bir rastgele öğe seçme
- medyanı seçmek
Örneğin: {51, 36, 62, 13, 16, 7, 5, 24} dizisinde 24'ü pivot (son eleman) olarak alıyoruz . Yani ilk geçişten sonra liste bu şekilde değişecek.
{5 7 16 13 24 62 36 51}
Bu nedenle, ilk geçişten sonra dizi, seçilen pivottan daha küçük tüm öğeler sol tarafında ve tüm büyük öğeler sağ tarafında olacak şekilde sıralanır. Pivot nihayet dizinin sıralanmış versiyonunda olması gereken konumdadır. Şimdi {5 7 16 13} ve {62 36 51} alt dizileri iki ayrı dizi olarak kabul edilir ve onlara aynı özyinelemeli mantık uygulanacak ve tüm dizi sıralanana kadar bunu yapmaya devam edeceğiz.

Ayrıca Okuyun: Veri Yapısında Yığın Sıralama
İçindekiler
O nasıl çalışır?
Hızlı sıralama algoritmasında izlenen adımlar şunlardır:
- Son eleman olarak pivotumuzu seçiyoruz ve diziyi ilk kez bölmeye (veya bölmeye) başlıyoruz.
- Bu bölümleme algoritmasında dizi, pivottan daha küçük olan tüm elemanlar pivotun sol tarafında olacak ve pivottan daha büyük olan tüm elemanlar sağ tarafında olacak şekilde 2 alt diziye bölünür.
- Ve pivot eleman son sıralanmış konumunda olacaktır.
- Sol ve sağ alt dizilerdeki öğelerin sıralanması gerekmez.
- Daha sonra yinelemeli olarak sol ve sağ alt dizileri seçiyoruz ve alt dizilerde bir pivot seçerek her biri üzerinde bölümleme yapıyoruz ve adımlar aynı şekilde tekrarlanıyor.
Aşağıda, örnek bir dizi kullanılarak algoritmanın C++ kodunda nasıl çalıştığı gösterilmektedir.
void QuickSort(int a[], int düşük, int yüksek)
{
if(yüksek<düşük)
dönüş;
int p= partition(a,düşük,yüksek);
QuickSort(a,düşük,p-1);
QuickSort(a,p+1,yüksek);
}
int bölümü(int a[], int düşük, int yüksek)
{
int pivot=a[yüksek];
int i=düşük;
for(int j=düşük; j<yüksek; j++)
{
if(a[j]<=pivot)
{
takas(&a[j],&a[i]);
ben++;
}
}
takas(&a[i],&a[yüksek]);
dönüş i;
}
int ana()
{
int dizi[]={6,1,5,2,4,3};
HızlıSırala(dizi,0,5);
cout<<”Sıralanan dizi: “;
for(int i=0; i<6; i++)

cout<<arr[i]<<" ";
0 döndür;
}
Aşağıda, verilen diziyi ne kadar hızlı sıralayacağına dair resimli bir temsil bulunmaktadır.
İlk giriş dizisinin şöyle olduğunu varsayalım:


Böylece, ilk bölümümüzden sonra, pivot öğe, tüm küçük öğeleri solda ve daha büyükleri sağda olacak şekilde, sıralanmış dizideki doğru yerindedir.
Şimdi QuickSort() , {1,2} ve {6,4,5} alt dizileri için özyinelemeli olarak çağrılacak ve dizi sıralanana kadar devam edecek.
Mutlaka Okuyun: Bilmeniz Gereken Yapay Zeka Algoritma Türleri
Karmaşıklık Analizi
Ω En İyi Durum Zaman Karmaşıklığı: Ω Θ Ortalama Zaman Karmaşıklığı: Θ O(n En Kötü Durum Zaman Karmaşıklığı: O(n Bölümleme, neredeyse eşit alt dizilere yol açarsa, zaman karmaşıklığı O(n*log n) olarak, çalışma süresi en iyisidir.

En kötü durum, öğelerin zaten sıralandığı ve son öğe olarak pivotun seçildiği durumlara sahip diziler için olur. Burada bölümleme, tüm öğelerin zaten pivottan daha küçük olduğu ve dolayısıyla sol tarafında olduğu ve sağ tarafta hiçbir öğenin bulunmadığı dengesiz alt diziler verir.
O(n*log n) O(n*log n)
Çözüm
Quicksort, karşılaştırmaya dayalı bir algoritmadır ve kararlı değildir . Yapılabilecek küçük bir optimizasyon, önce daha küçük alt dizi ve ardından daha büyük alt dizi için özyinelemeli QuickSort() işlevini çağırmaktır.
Genel olarak, Hızlı Sıralama, daha küçük diziler durumunda Merge Sort'tan daha iyi performans sağlayabilen oldukça verimli bir sıralama tekniğidir.
Daha fazlasını öğrenmek istiyorsanız, yukarıGrad & IIIT-B'nin Makine Öğrenimi ve Yapay Zeka Programındaki PG Diplomasına göz atın.
Quicksort algoritmasını kullanmanın dezavantajları nelerdir?
Genel olarak, hızlı sıralama algoritması, bazı dezavantajları olmasına rağmen, herhangi bir boyuttaki bir listeyi sıralamak için en verimli ve yaygın olarak kullanılan tekniktir. Bu, uygulamadaki küçük bir kusur kontrol edilmezse sonuçların zarar göreceğini ima eden kırılgan bir yöntemdir. Özellikle özyineleme mevcut değilse, uygulanması zordur. Hızlı sıralama algoritmasının küçük bir sınırlaması, en kötü durum performansının kabarcık, ekleme veya seçmeli türlerin tipik performanslarıyla karşılaştırılabilir olmasıdır.
Kova sıralama algoritması ne için kullanılır?
Kova sıralama algoritması, farklı öğeleri farklı gruplara yerleştirmek için kullanılan bir sıralama yöntemidir. Çeşitli alt gruplara kovalar denildiği için bu şekilde adlandırılmıştır. Elemanların tamamen düzgün dağılımı nedeniyle asimptotik olarak hızlıdır. Bununla birlikte, çok büyük bir dizimiz varsa, toplam işlemin maliyetini artırdığı ve daha az uygun hale getirdiği için etkisizdir.
Hangisini kullanmak daha iyidir - hızlı sıralama veya birleştirme algoritması?
Küçük veri kümeleri için Quicksort, Selection Sort gibi diğer sıralama algoritmalarından daha hızlıdır, ancak Mergesort, veri boyutundan bağımsız olarak tutarlı bir performansa sahiptir. Quicksort ise daha büyük dizilerle uğraşırken mergesort'tan daha az verimlidir. Mergesort daha fazla yer kaplar, ancak hızlı sıralama çok az yer kaplar. Quicksort, özellikle, güçlü bir önbellek konumuna sahiptir ve sanal bellek ortamı gibi birçok durumda birleştirme sıralamasından daha hızlı olmasını sağlar. Sonuç olarak, hızlı sıralama, birleştirme algoritmasından daha iyi performans gösterir.
