Sunuyu indir
1
HIZLI SIRALAMA ALGORİTMALARI(QUICK SORT)
2
VERİ YAPILARI Sayısal ortamdaki bilgilerin veya verilerin belirli bir anahtar sözcüğe göre belirli bir anlamda sıralı erişimini sağlayan düzenlemedir. Temel Sıralama Algoritmaları; Araya Sokma(İnsertion) Seçmeli(Selection) Kabarcık(Bubble) Birleşmeli(Marge) Kümeleme(Heap) Hızlı(quick) Sıralama
3
Hızlı(Quick) Sıralama;
Böl ve yönet yaklaşımına dayanır ve dizi belirli sınır değerine göre iki alt diziye ayrılır. İkiye ayırma işlemi, bu sınır sayısından küçük elamanlar bir tarafa , büyük elemanlar diğer tarafa toparlanarak yapılır.
4
Bir liste oluşturmadan önce bu listeyi quick sort yöntemiyle nasıl çözeceğimizi öğrenelim .
Önce listeden bir isim seçerek bu isme pivot elemanı adını verelim. Amacımız pivot elemanın listedeki doğru yerini bulmak ve onu oraya koymak olsun. Pivotun doğru yerini bulmak için listeyi iki daha küçük listeye bölelim.
5
Bu listelerden birincisi pivot elamanından önce yer alan isimler listesi olsun, ikincisi de pivottan sonra gelen elemanlar listesi olsun. Sonuç olarak, pivot elemanının doğru yeri, bu iki liste arasında yer alacaktır.
6
Listemizi iki alt satıra bölmek için adına imleç(pointer) denen yeri değişebilen oklar kullanacağız. Bu oklardan birini pivot elemandan sonraki satıra ikincisini de son satıra koyalım. Geliştirdiğimiz algoritma imleçleri birbirine yaklaştırırken aşağıdaki çıkarımı(assertion) sağlasın: Çıkarım 1: Üsteki imlecin (A) üstünde yer alan isimler alfabetik olarak sıralamada pivot elemanından daha küçüktür. Alttaki imleçte (B) daha aşağıda yer alan isimler ise alfabetik sıralamada pivot elamanından daha büyüktür.
7
Elimizde şöyle bir isim listesi olsun: Jale, Bülent, Ali, Tolga, Canan, Banu, Gül, Ceyda, Sema, Kemal. Bu listedeki ilk elemanı pivot eleman olarak seçer, listenin ikinci ve son elemanlarına sırası ile A ve B imleçlerini koyarak algoritmayı başlatalım.
8
Jale (pivot) A Bülent Ali Tolga Canan Banu Gül Ceyda Sema B Kemal
9
Bir sonraki adımda B imlecini listenin yukarılarına doğru hareket ettirelim. Her seferinde de en altta kalan isimlerin pivot elemandan büyük olup olmadığını kontrol edelim. Bu adımda pivot elemandan küçük ya da ona eşit bir isme gelince, B imlecini o elamanın bulunduğu satıra yerleştiririz. İmleç en fazla pivot elemana kadar ilerleyecek ve orada duracaktır.Bu isme eriştiğimiz zaman artık B imlecini hareket ettirmekten vazgeçeriz. Yukarıdaki örnekte B imleci Ceydada duracaktır: Jale (pivot) A Bülent Ali Tolga Canan Banu Gül B Ceyda Sema Kemal
10
Şimdi de A imlecini aşağıya doğru kaydıralım
Şimdi de A imlecini aşağıya doğru kaydıralım. Aşağıya doğru indikçe isimleri pivot elemanı ile karlaştırarak kaydırma işlemini isimler pivot elemanından daha küçük veya ona eşit olduğu sürece devam ettirelim. Olabilecek en son şey iki imlecin birbirini geçmesidir. Bu durum ise pivot elemanın B imlecinin bulunduğu yerde olması gerektiğini gösterir. Örnekte ilk hareketler iki imleci de tıkamıştır. Bu koşullar sağlandığı zaman imleçleri hareket ettirirsek birinci çıkarımı ihlal etmiş oluruz. Yukarıdaki imleci aşağı kaydırarak listeyi şu hale getirmiş oluruz:
11
Jale (pivot) Pivottan büyük yada Bülent ona eşit isimler Ali A Tolga Canan Banu Gül B Ceyda Pivottan büyük isimler Sema Kemal
12
Bu durumda kilit (deadlock) adı verilir
Bu durumda kilit (deadlock) adı verilir. Kilidin bir şekilde açılması gerekir. Bunun yolu ise imleçlerin gösterdiği isimleri birbirleri ile değiştirmektir. Ancak bundan sonra, çıkarımızı ihlal etmeden imleçleri tekrar hareket ettirebiliriz. Bu değiştirmeden sonra yeni listemiz şöyle olacaktır: Jale (pivot) Pivottan büyük yada Bülent ona eşit isimler Ali A Ceyda Canan Banu Gül B Tolga Pivottan büyük isimler Sema Kemal
13
Şimdi tekrar imleçleri hareket ettirir ve her seferinde kilit oluşunca imleçlerin gösterdiği isimlerin yerlerini değiştirmeye devam ederiz. Sonunda iki imleç listenin bir yerinde birbirini kesecektir. Örneğimizde bu kesişme Gül ile Tolga arasında olacaktır. Yani; imleçlerin kesişmesi ile liste aşağıdaki hale gelecektir: Jale (pivot) Pivottan büyük yada Bülent ona eşit isimler Ali Ceyda Canan Banu B Gül A Tolga Pivottan büyük isimler Sema Kemal
14
Artık pivot elemanı doğru yere yerleştirebilecek bir duruma gelmiş olduk. Yukarıdaki açıklamalardan da anlaşılacağı gibi, pivot elemanı B imlecinin gösterdiği yere girmelidir. Bu işlemi yapmanın en kestirme yolu pivot ile B imlecinin gösterdiği elemanları değiştirmektir. Bu değişimden sonra listemiz şu hale gelecektir:
15
Gül Bülent Ali Ceyda Canan Banu B Jale (pivot) A Tolga Sema Kemal
16
Bu kadar uğraşıdan sonra sadece listedeki bir elemanın yerini bulabildik! Ne var ki, biraz dikkat edilirse, bundan sonraki işin çok kolay olduğu fark edilebilir. Zira yapılması gereken iş, aynı yöntemi tekrarlayarak iki alt listeye uygulamaktır. Bu yaklaşım yapılması gereken iş miktarını iki katına çıkarmış görünse de listelerin boyları hızla kısaldığı için çabuk bitecektir.
17
İf(Liste ikiden az eleman içeriyorsa)
Şimdi de Hızlı Sıralama Algoritmasını bir sözde-kod ile sunalım. Bu işlemi Sırala adı verilen bir yordam ile çağıralım. Bu yordamın ilk işi listenin uzunluğunu ölçmektir. Eğer, listede iki veya daha fazla isim varsa yordam, if-then-else yapısının esle kısmına dallanarak devam eder. İf(Liste ikiden az eleman içeriyorsa) Then(Listeyi sırala olarak belirle) Else (Listenin ilk elamanını pivot elemanı olarak seç A imlecini listenin ikinci ve B imlecini de son elemanına yerleştir
18
While (A ve B imleçleri kesişmediği sürece) do [B imlecini yukarı doğru pivottan küçük veya ona eşit olan elemana kadar kaydır; A imlecini aşağı doğru pivottan büyük olan elemana kadar kaydır) İf (A ve B imleçleri kesişmiyorsa) Then(imleçlerin gösterdiği yerlerin elemanlarını değiştir)] B imlecinin gösterdiği eleman ile pivot elemanın yerini değiştir. Sırala yordamını pivotun üstündeki listeye uygula Sırala yordamını pivot elemanının altındaki listeye uygula.
Benzer bir sunumlar
© 2024 SlidePlayer.biz.tr Inc.
All rights reserved.