algoritma geliştirme ve veri yapıları –...

35
Mustafa Kemal Üniversitesi Algoritma Geliştirme ve Veri Yapıları – 6 Arama ve Sıralama Algoritmaları

Upload: vandan

Post on 02-Apr-2019

244 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Algoritma Geliştirme ve Veri Yapıları – 6myo.bartin.edu.tr/akgul/dersler/ybs207/veriyapilari6.pdf · Dahili Algoritma • Arama veya sıralama işlemleri RAM gibi bellek üzerinde

Mustafa Kemal Üniversitesi

Algoritma Geliştirme ve Veri Yapıları – 6

Arama ve Sıralama Algoritmaları

Page 2: Algoritma Geliştirme ve Veri Yapıları – 6myo.bartin.edu.tr/akgul/dersler/ybs207/veriyapilari6.pdf · Dahili Algoritma • Arama veya sıralama işlemleri RAM gibi bellek üzerinde

Mustafa Kemal Üniversitesi

Arama ve Sıralama Algoritmaları

• Arama ve sıralama algoritmaları bilişim uygulamalarında önemli bir yer tutar. Çünkü bilgiye ait verinin saklanması ve gerektiğinde bir parçası ile kalan bütününe erişilmesi veya bilginin belirli bir düzene göre sıralanması çoğu zaman ihtiyaç duyulan bir işlemdir.

• Arama ve sıralama algoritmaları, bu işlemlerin yanı sıra benzer mantıkta olan problemlerin çözümü konusunda da kolaylık sağlayabilmektedir.

Page 3: Algoritma Geliştirme ve Veri Yapıları – 6myo.bartin.edu.tr/akgul/dersler/ybs207/veriyapilari6.pdf · Dahili Algoritma • Arama veya sıralama işlemleri RAM gibi bellek üzerinde

Mustafa Kemal Üniversitesi

Arama ve Sıralama Algoritmaları

Temel Kavramlar • Sıralama, sayısal ortamdaki bilgilerin belirli bir

anahtar sözcüğe göre belirli bir anlamda sıralı hale getirilmesidir.

• Arama, bir veri kümesi içerisindeki bir bilginin varlığının belirlenmesi, yerinin bulunması veya verinin bir parçasından bütününe erişilmesi işlemdir.

• Arama işlemi belirli bir veya birkaç anahtar sözcüğe dayanılarak gerçekleştirilir. Kullanılan bu anahtar sözcükler iki farklı şekilde olabilir: birincil ve ikincil.

Page 4: Algoritma Geliştirme ve Veri Yapıları – 6myo.bartin.edu.tr/akgul/dersler/ybs207/veriyapilari6.pdf · Dahili Algoritma • Arama veya sıralama işlemleri RAM gibi bellek üzerinde

Mustafa Kemal Üniversitesi

Arama ve Sıralama Algoritmaları

Temel Kavramlar Birincil Anahtar Sözcük • Birincil anahtar sözcüğe göre arama yapılırsa, yalnızca bir

tane sonuç bulunmalıdır. Dolayısıyla bu anahtar sözcüğe göre arama yapılıyorsa aranan bulununca geride kalan kayıtlara bakılmaksızın arama işlemi sonlandırılır.

İkincil Anahtar Sözcük • İkincil anahtar sözcüğe göre arama yapılırsa aranan sözcüğe

en uygun birden fazla sonuç elde edilebilir; dolayısıyla ikincil anahtar sözcüğe göre arama yapan algoritmalar var olan kayıtların hepsini sınamış olmalıdır. Gerektiğinde sonuç liste üzerinde tutulmalıdır.

Page 5: Algoritma Geliştirme ve Veri Yapıları – 6myo.bartin.edu.tr/akgul/dersler/ybs207/veriyapilari6.pdf · Dahili Algoritma • Arama veya sıralama işlemleri RAM gibi bellek üzerinde

Mustafa Kemal Üniversitesi

Arama ve Sıralama Algoritmaları

Temel Kavramlar • Arama işlemi bellek üzerinde tutulan veriler üzerinde yapılıyorsa dahili,

disk gibi saklama birimleri üzerinde yapılıyorsa harici arama olarak adlandırılır.

Dahili Algoritma • Arama veya sıralama işlemleri RAM gibi bellek üzerinde tutulan veriler

üzerinden yapılır. Veriye erişim hızlı olduğu için verilerin yer değiştirilmesi, araya ekleme, aradan çıkarma gibi işlemler daha hızlı gerçekleşir. Yani verilerin bellek üzerindeki konumunun bir önemi yoktur.

Harici Algoritma • Arama veya sıralama işlemleri disk, yedekleme birimi gibi belleğe göre

daha yavaş olan saklama birimleri üzerinde yapılır. Diske erişim belleğe göre daha yavaş olacağından verilerin yer değiştirmesi, bir veriden diğerine atlanması vs. gibi işlemlerin oldukça fazla zaman harcar. Bu nedenle de bu birimler üzerinde yapılacak işlem sırasında verilerin fazla hareket ettirilmemesi gerekmektedir.

Page 6: Algoritma Geliştirme ve Veri Yapıları – 6myo.bartin.edu.tr/akgul/dersler/ybs207/veriyapilari6.pdf · Dahili Algoritma • Arama veya sıralama işlemleri RAM gibi bellek üzerinde

Mustafa Kemal Üniversitesi

Arama ve Sıralama Algoritmaları

1) Arama Algoritmaları • Arama algoritmaları bir veri kümesi içerisinde herhangi

bir parçasının varlığını arama veya bir parçası ile kalan diğer bütününü arayıp bulmak için kullanılır.

• Arama işleminin yapılış şekli, bilgiye ait verilerin düzenlenmesi ve bellekte tutulmasına göre farklılık gösterebilir.

• En yalın arama şekli, bilgiye ait verilere baştan sona kadar tek tek bakılarak yapılmasıdır(ardışıl arama). Bu yöntemde arama algoritması kolay yazılır fakat arama hızı düşüktür.

Page 7: Algoritma Geliştirme ve Veri Yapıları – 6myo.bartin.edu.tr/akgul/dersler/ybs207/veriyapilari6.pdf · Dahili Algoritma • Arama veya sıralama işlemleri RAM gibi bellek üzerinde

Mustafa Kemal Üniversitesi

Arama ve Sıralama Algoritmaları

1) Arama Algoritmaları • Arama algoritmaları 3 temel sınıfta toplanabilir;

o Ardışıl (Doğrusal) Arama o İkili Arama o Çırpı (Hash) Algortiması

• Uygulamada çoğunlukla ikili arama algoritmaları

tercih edilirken, en hızlı arama algoritması olan çırpı algoritmasının kullanılabilmesi için çatışmaların olmadığı ideal bir çırpı fonksiyonun bulunması gerekmektedir.

Page 8: Algoritma Geliştirme ve Veri Yapıları – 6myo.bartin.edu.tr/akgul/dersler/ybs207/veriyapilari6.pdf · Dahili Algoritma • Arama veya sıralama işlemleri RAM gibi bellek üzerinde

Mustafa Kemal Üniversitesi

Arama ve Sıralama Algoritmaları

1.1-Ardışıl Arama Algoritması

• Tasarımı en yalın arama algoritmasıdır. Yöntem olarak ilk kayıttan son kayda kadar tüm veriler tek tek aranılan değerle karşılaştırılır. Eğer arama işlemi birincil anahtar sözcük üzerinden yapılıyorsa aranılan sonuç bulunduğunda işlem sonlandırılır. Eğer arama işlemi ikincil anahtar sözcüğe dayanılarak yapılıyorsa son kayda kadar işlem devam eder.

Page 9: Algoritma Geliştirme ve Veri Yapıları – 6myo.bartin.edu.tr/akgul/dersler/ybs207/veriyapilari6.pdf · Dahili Algoritma • Arama veya sıralama işlemleri RAM gibi bellek üzerinde

Mustafa Kemal Üniversitesi

Arama ve Sıralama Algoritmaları

1.1-Ardışıl Arama Algoritması

• Ardışıl aramanın en kötü durumdaki zaman karmaşıklığı O(N)’dir. Yani N kayıttan oluşan bir veri yapısında en kötü durum N çevrim yapılmasıdır(son kayıt için).

Page 10: Algoritma Geliştirme ve Veri Yapıları – 6myo.bartin.edu.tr/akgul/dersler/ybs207/veriyapilari6.pdf · Dahili Algoritma • Arama veya sıralama işlemleri RAM gibi bellek üzerinde

Mustafa Kemal Üniversitesi

Arama ve Sıralama Algoritmaları

int ardisilArama(int A[], int N, int aranan){

int k;

for(k=0;k<N;k++) /*N çevrimlik döngü*/

if(A[k]== aranan) return k; /* Aranan bulundu indisi gönder*/

return -1; /*Bulunamadı -1 gönder*/

}

main(){

int indis,ara,B[]={13,12,15,11,26,5,47,10,27,34};

puts(“Aranan Sayi:”); scanf(“%d”,&ara);

indis= ardisilArama(B,10,ara); /*10 elemanlı dizide arama yapılıyor*/

if(indis ==1) puts(“Aranan sayi bulunamadi!”); else

printf(“Aranan sayi %d indisli eleman\n”, indis);

}

Page 11: Algoritma Geliştirme ve Veri Yapıları – 6myo.bartin.edu.tr/akgul/dersler/ybs207/veriyapilari6.pdf · Dahili Algoritma • Arama veya sıralama işlemleri RAM gibi bellek üzerinde

Mustafa Kemal Üniversitesi

Arama ve Sıralama Algoritmaları

1.2-İkili Arama Algoritması • İkili arama, halihazırda sıralı olan veriler üzerinde çalışan

bir algoritmadır, yani verilerin önceden, belirli anahtar sözcüğe göre sıralı olmalıdır. Eğer veriler bir dizi üzerinde sıralı ise veya veriler ikili arama ağacı üzerinde tutuluyorsa ikili arama yapılabilir.

• İkili aramanın zaman karmaşıklığı O(log2N).

• 1 milyon kayıt içerisinde arama için gerekli çevrim sayısı log21000000=~20. Bu yüzden kayıt sayısı fazla olan veri kümelerinde arama için idealdir(Ardışıl ile en kötü durumda 1 milyon çevrim)

Page 12: Algoritma Geliştirme ve Veri Yapıları – 6myo.bartin.edu.tr/akgul/dersler/ybs207/veriyapilari6.pdf · Dahili Algoritma • Arama veya sıralama işlemleri RAM gibi bellek üzerinde

Mustafa Kemal Üniversitesi

Arama ve Sıralama Algoritmaları

int ikiliArama(int D[], int N, int aranan){ int ortadaki, sol=0, sag=N-1; while(sol<=sag) { ortadaki=(sol+sag)/2; /* ortadaki elemanın indisi hesaplanıyor */ if(aranan == D[ortadaki]) return ortadaki; /* bulundu, indis gönderiliyor */ else if(aranan>D[ortadaki]) sol=ortadaki+1; else sag=ortadaki-1; } return -1; /* bulunamaz ise -1 değeri gönderiliyor */

}

main(){

int indis,ara,B[]={1,2,3,4,5,6,7,8,9,10};

puts(“Aranan Sayi:”); scanf(“%d”,&ara);

indis= ikiliArama(B,10,ara); /*10 elemanlı dizide arama yapılıyor*/

if(indis ==1) puts(“Aranan sayi bulunamadi!”); else

printf(“Aranan sayi %d indisli eleman\n”, indis);

}

Page 13: Algoritma Geliştirme ve Veri Yapıları – 6myo.bartin.edu.tr/akgul/dersler/ybs207/veriyapilari6.pdf · Dahili Algoritma • Arama veya sıralama işlemleri RAM gibi bellek üzerinde

Mustafa Kemal Üniversitesi

Arama ve Sıralama Algoritmaları

• İkili arama ağacı üzerinde arama

void ikiliAramaAgac(agacdugum *agac, veriTürü aranan) { if(agac==NULL) return; /* Ağaç boş ise dön */ if(aranan==agac->anahtar) /* aranan kök düğümde ise bulundu */ yazEkrana(Agac); if(aranan < agac->anahtar) /* aranan hangi alt ağaçta? */ ikiliaramaAgac(agac->sol); /* sol altağaca dallan */ else ikiliaramaAgac(agac->sag); /* sağ altağaca dallan */ }

Page 14: Algoritma Geliştirme ve Veri Yapıları – 6myo.bartin.edu.tr/akgul/dersler/ybs207/veriyapilari6.pdf · Dahili Algoritma • Arama veya sıralama işlemleri RAM gibi bellek üzerinde

Mustafa Kemal Üniversitesi

Arama ve Sıralama Algoritmaları

1.3-Çırpı Fonksiyonu • Çırpı fonksiyonu arama işlemini bir çırpıda yapmak ve aranana doğrudan

ulaşmak için kullanılan bir yöntemdir.

• Fonksiyona arama işleminde kullanılacak anahtar sözcük değeri girilir ve karşılığında bir tamsayı alınır. Bu tamsayı, indis gibi kullanılarak dizi düzeninde tutulan veriye erişilir.

• Zaman karşılığı idealde O(1) olur. Ancak uygulamada her zaman için ideal bir çırpı fonksiyonu bulmak veya üretmek mümkün olmadığı durumda sapmalar olmaktadır.Bütünüyle bir çırpı algoritması; çırpı fonksiyonu, çırpı tablosu ve çatışmaların çözümlenmesi gibi üç ayrı parçadan oluşur.

• Çırpı fonksiyonu farklı anahtar sözcükler için aynı indis değerini üretiyorsa çatışma olur. Eğer çatışma oluşturmayan bir çırpı fonksiyonu bulunamıyorsa, işin çatışmalarla yürütülmesi gerekmektedir. Bu işleme çatışmaların çözümlenmesi adı verilmektedir.

Page 15: Algoritma Geliştirme ve Veri Yapıları – 6myo.bartin.edu.tr/akgul/dersler/ybs207/veriyapilari6.pdf · Dahili Algoritma • Arama veya sıralama işlemleri RAM gibi bellek üzerinde

Mustafa Kemal Üniversitesi

Arama ve Sıralama Algoritmaları

2) Sıralama Algoritmaları • Sıralama, bilgilerin/verilerin belirli bir anahtar sözcüğe

göre belirli bir anlamda sıralı duruma getirilmesidir.

• Sıralama işleminde bir anahtar sözcük kullanılır ve sıralamada ana unsurdur. Anahtar sözcük verinin bir parçası olabileceği gibi tamamı da olabilir.

• Bir sıralama algoritması için önemli unsurlar, yürütme zamanı ve gerekli bellek alanı ihtiyacıdır. Yürütme zamanı doğrudan algoritma için yazılan koda ve işlemlerin hangi ortamda yapıldığına bağlı iken, gerekli bellek alanını algoritma belirler.

Page 16: Algoritma Geliştirme ve Veri Yapıları – 6myo.bartin.edu.tr/akgul/dersler/ybs207/veriyapilari6.pdf · Dahili Algoritma • Arama veya sıralama işlemleri RAM gibi bellek üzerinde

Mustafa Kemal Üniversitesi

Arama ve Sıralama Algoritmaları

2) Sıralama Algoritmaları

Sıralama Algoritması Uygun Veri Modeli Uygunluk

Araya Sokma Bağlantılı Liste, Dizi Dahili

Seçmeli Dizi, Bağlantılı Liste Dahili Harici

Kabarcık Dizi, Bağlantılı Liste Dahili

Birleşmeli Bağlantılı Liste, Liste,Dizi Dahili Harici

Kümeleme Bağlantılı Liste, Dizi Dahili

Hızlı Sıralama Dizi, Ağaç Dahili

Page 17: Algoritma Geliştirme ve Veri Yapıları – 6myo.bartin.edu.tr/akgul/dersler/ybs207/veriyapilari6.pdf · Dahili Algoritma • Arama veya sıralama işlemleri RAM gibi bellek üzerinde

Mustafa Kemal Üniversitesi

Arama ve Sıralama Algoritmaları

2.1-Araya Sokma Algoritması • Bu algoritmada, sıralanacak dizinin ilk elemanı yerinde bırakılarak daha

sonraki elemanlar tek tek ele alınır ve dizideki sırasına uygun yere konulur.

• Sıralama süreci boyunca dizi iki parça gibi düşünülür; sıralı olan ön taraf ve henüz sıralanmamış arka taraf gibi.

• Algoritmada, araya sokulacak elemanın yerini bulma ve geride kalanları birer kaydırma işlemi bulunmaktadır.

• Bir algoritmada bir eleman eklemenin zaman karmaşıklığı O(n) iken sırasız bir diziyi tamamen sıralamak için zaman karmaşıklığı O(n2) olmaktadır.

• Algoritma harici sıralama için daha uygundur çünkü elemanların yerlerinin boşaltılması ve eleman kaydırma işlemi gerektirmektedir.

Page 18: Algoritma Geliştirme ve Veri Yapıları – 6myo.bartin.edu.tr/akgul/dersler/ybs207/veriyapilari6.pdf · Dahili Algoritma • Arama veya sıralama işlemleri RAM gibi bellek üzerinde

Mustafa Kemal Üniversitesi

Arama ve Sıralama Algoritmaları

Page 19: Algoritma Geliştirme ve Veri Yapıları – 6myo.bartin.edu.tr/akgul/dersler/ybs207/veriyapilari6.pdf · Dahili Algoritma • Arama veya sıralama işlemleri RAM gibi bellek üzerinde

Mustafa Kemal Üniversitesi

Arama ve Sıralama Algoritmaları

2.1-Araya Sokma Algoritması

arayaSokma(int D[], int N){

int i, k,ekle;

for(i=0; i<N; i++){

ekle=D[i];

for(k=i-1;k>=0 && ekle<=D[k]; k--)

D[k+1]=D[k]; /* boşalan düğümün bellek alanı serbest bırakılıyor */

D[k+1]=ekle; /* koy-ekle modu */

}

}

Page 20: Algoritma Geliştirme ve Veri Yapıları – 6myo.bartin.edu.tr/akgul/dersler/ybs207/veriyapilari6.pdf · Dahili Algoritma • Arama veya sıralama işlemleri RAM gibi bellek üzerinde

Mustafa Kemal Üniversitesi

Arama ve Sıralama Algoritmaları

2.2-Seçmeli Sıralama • Bu algoritmada dizinin herhangi bir ucundan başlanır.

• Dizinin başından başlandığı ve küçükten büyüğe doğru sıralama yapılacağı varsayılırsa algoritmanın davranışı şöyledir:

o İlk eleman alınır ve kendisi dahil en küçük eleman aranır.

o En küçük bulunduğu zaman ilk eleman ile yer değiştirilir.

o İkinci eleman alınır ve kendisi dahil kalan elemanlar arasında ikinci küçük eleman aranır ve ikinci elemanla yer değiştirilir.

• Seçmeli sıralama algoritmasının en olumlu yanı, eğer herhangi bir eleman gerçek yerinde ise yer değiştirme işlemi yapılmamasıdır.

• Bu nedenle yarı sıralı dizilerde toplam yer değiştirme oranı daha az olur.

Page 21: Algoritma Geliştirme ve Veri Yapıları – 6myo.bartin.edu.tr/akgul/dersler/ybs207/veriyapilari6.pdf · Dahili Algoritma • Arama veya sıralama işlemleri RAM gibi bellek üzerinde

Mustafa Kemal Üniversitesi

Arama ve Sıralama Algoritmaları

Sıralanacak Dizi: [7, 3, 5, 8, 2, 9, 4, 15, 6]

Başlangıç Durumu: [7, 3, 5, 8, 2, 9, 4, 15, 6]

Adım İşlem Öncesi İşlem Sonrası

1 [] [7, 3, 5, 8, 2, 9, 4, 15, 6] [2][ 3, 5, 8, 7, 9, 4, 15, 6]

2 [2][ 3, 5, 8, 7, 9, 4, 15, 6] [2, 3][ 5, 8, 7, 9, 4, 15, 6]

3 [2, 3][ 5, 8, 7, 9, 4, 15, 6] [2, 3, 4][ 8, 7, 9, 5, 15, 6]

4 [2, 3, 4][ 8, 7, 9, 5, 15, 6] [2, 3, 4, 5][ 7, 9, 8, 15, 6]

5 [2, 3, 4, 5][ 7, 9, 8, 15, 6] [2, 3, 4, 5, 6][ 9, 8, 15, 7]

6 [2, 3, 4, 5, 6][ 9, 8, 15, 7] [2, 3, 4, 5, 6, 7][ 8, 15, 9]

7 [2, 3, 4, 5, 6, 7][ 8, 15, 9] [2, 3, 4, 5, 6, 7, 8][ 15, 9]

8 [2, 3, 4, 5, 6, 7, 8][ 15, 9] [2, 3, 4, 5, 6, 7, 8, 9][15]

9 [2, 3, 4, 5, 6, 7, 8, 9][15] [2, 3, 4, 5, 6, 7, 8 , 9, 15][]

Page 22: Algoritma Geliştirme ve Veri Yapıları – 6myo.bartin.edu.tr/akgul/dersler/ybs207/veriyapilari6.pdf · Dahili Algoritma • Arama veya sıralama işlemleri RAM gibi bellek üzerinde

Mustafa Kemal Üniversitesi

Arama ve Sıralama Algoritmaları

2.2-Seçmeli Sıralama secmelisirala(int D[], int N)

{ int i, index, j, enkucuk;

for(i=0; i<(N-1); i++) { /* dizinin başından başlanıyor */ enkucuk=D[N-1]; /* son eleman en küçük kabul ediliyor */ index=N-1; for(j=i; j<(N-1); j++) /* daha küçüğü var mı diye aranıyor */ if(D[j]<enkucuk) { enkucuk=D[j]; index=j; } D[index]=D[i]; /* daha küçüğü varsa yer değiştiriliyor */ D[i]=enkucuk; } }

Page 23: Algoritma Geliştirme ve Veri Yapıları – 6myo.bartin.edu.tr/akgul/dersler/ybs207/veriyapilari6.pdf · Dahili Algoritma • Arama veya sıralama işlemleri RAM gibi bellek üzerinde

Mustafa Kemal Üniversitesi

Arama ve Sıralama Algoritmaları

2.3-Kabarcık Sıralaması • Bu algoritmada, sıralanacak elemanlar üzerinde bir yönden diğer yöne doğru

ilerlenirken komşu iki elemanın sıraya girecek şekilde yer değiştirmesine dayanır.

• Yer değiştirme işleminde, komşu iki eleman karşılaştırılır; kendi aralarında uygun yer değiştirmeler yapılır. Bu işlem sıralama bitene kadar tekrarlanır. Elemanlar üzerindeki her bir dolaşma bir tane elemanın gerçek yerine oturmasını sağlar. Dolayısıyla işleme, yerine oturmayan elemanlar üzerinde devam edilir.

• Kabarcık sıralaması iki çevrim kullanılarak gerçeklenir; biri elemanların üzerinde hareket edilmesi, diğeri yerine oturmayan elemanların işlenmesi için. Her çevrimde bir eleman sıralı durumdaki yerine yerleştiği için ikinci çevrim her seferinde bir eksik yapılır.

• Kabarcık algoritmasının zaman karmaşıklığı O(n2). Eğer n tane elemandan yalnızca c tanesi sıralı değilse zaman karmaşıklığı O(cn) olur.

Page 24: Algoritma Geliştirme ve Veri Yapıları – 6myo.bartin.edu.tr/akgul/dersler/ybs207/veriyapilari6.pdf · Dahili Algoritma • Arama veya sıralama işlemleri RAM gibi bellek üzerinde

Mustafa Kemal Üniversitesi

Arama ve Sıralama Algoritmaları

2.3-Kabarcık Sıralaması /* Kabarcık sıralama fonksiyonu */

kabarcik(int D[], int N) { int gecici, k, hareket;

for(hareket=0; hareket<N-1; hareket++) { for(k=0; k<N-1-hareket; k++) if(D[k]>D[k+1]) { /* komşular karşılaştırılıyor */ gecici=D[k]; /* yer değiştirme kodu */ D[k]=D[k+1]; D[k+1]=gecici; } } }

Page 25: Algoritma Geliştirme ve Veri Yapıları – 6myo.bartin.edu.tr/akgul/dersler/ybs207/veriyapilari6.pdf · Dahili Algoritma • Arama veya sıralama işlemleri RAM gibi bellek üzerinde

Mustafa Kemal Üniversitesi

Arama ve Sıralama Algoritmaları

2.4-Birleşmeli Sıralama

• Bu sıralama böl ve yönet yaklaşımına dayanır ve dolayısıyla rekürsif tasarlanması doğasına uygundur.

• Sıralanması istenen küme elemanları, önce iki alt kümeye parçalanır ve fonksiyon kendisini sol alt küme ve sağ alt küme için iki kez çağırır.

• Parçalama işlemine, alt kümelerdeki eleman sayısı bir olana kadar devam edilir.

• Alt kümelerde bir tane eleman kalmış ise rekürsif çağırmalar geriye doğru çağırana dönmeye başlar ve geri dönülürken alt kümeler elemanları sıralı olacak biçimde birleştirir.

Page 26: Algoritma Geliştirme ve Veri Yapıları – 6myo.bartin.edu.tr/akgul/dersler/ybs207/veriyapilari6.pdf · Dahili Algoritma • Arama veya sıralama işlemleri RAM gibi bellek üzerinde

Mustafa Kemal Üniversitesi

Arama ve Sıralama Algoritmaları

2.4-Birleşmeli Sıralama birlesmeli(int D[], int sol,int sag)

{ if(sol<sag)

{

int k=(sol+sag)/2;

birlesmeli(D,sol,k);

birlesmeli(D,k+1,k);

birlestir(D, sol, k, sag);

}

}

birlestir(int D[], int sol,int k,int sag){

int i,j, M[],z=0;

for(i=sol,j=k+1;i<=k && j<=sag;){

if(D[i]<D[j]){M[z]=D[i];

i++; }

else{M[z]=D[j];

j++; }

z++;

}

return M;

}

Page 27: Algoritma Geliştirme ve Veri Yapıları – 6myo.bartin.edu.tr/akgul/dersler/ybs207/veriyapilari6.pdf · Dahili Algoritma • Arama veya sıralama işlemleri RAM gibi bellek üzerinde

Mustafa Kemal Üniversitesi

Arama ve Sıralama Algoritmaları

Page 28: Algoritma Geliştirme ve Veri Yapıları – 6myo.bartin.edu.tr/akgul/dersler/ybs207/veriyapilari6.pdf · Dahili Algoritma • Arama veya sıralama işlemleri RAM gibi bellek üzerinde

Mustafa Kemal Üniversitesi

Arama ve Sıralama Algoritmaları

2.5-Kümeleme(Heap) Sıralama • Kümeleme sıralamasının temeli ikili kümeleme(heap) ağacı kurulmasına

dayanır. Sıralanacak elemanlar ile önce bir kümeleme ağacı oluşturulur, bu durumda kök en büyük değere sahiptir.

• n elemanlı bir dizi üzerinde önce kümeleme ağacı kurulur, bu anda kök en büyük değeri tutar. Bu değer dizinin son elemanı ile yer değiştirilir.

• Bu aşamada en büyük değere sahip olan eleman dizinin sonuna alınmış olur, daha sonra dizinin kalan(n-1) elemanı yeniden kümeleme işlemine sokulur ve en büyük ikinci değere sahip olan kök olur. Bu değer de dizinin sondan ikinci elemanı ile yer değiştirilir. Bu aşamada en büyük ikinci değer, en büyük değerin önüne yerleştirilmiş olur. Daha sonra benzer işlemler (n-2),(n-3) elemanlı dizi için yapılır ve dizi adım adım sıralanır.

Page 29: Algoritma Geliştirme ve Veri Yapıları – 6myo.bartin.edu.tr/akgul/dersler/ybs207/veriyapilari6.pdf · Dahili Algoritma • Arama veya sıralama işlemleri RAM gibi bellek üzerinde

Mustafa Kemal Üniversitesi

Arama ve Sıralama Algoritmaları

2.5-Kümeleme(Heap) Sıralama /*Kaba kodu*/

kumelemesiramalasi(A)

{

Kumelemeagaciolustur(A);

for(k=elemanSayisi(A)-1;k>1;k--)

{

kok=A[0];

Kok ile A[k]’yı yer değiştir;

agacikumele(A,1);

}

}

Page 30: Algoritma Geliştirme ve Veri Yapıları – 6myo.bartin.edu.tr/akgul/dersler/ybs207/veriyapilari6.pdf · Dahili Algoritma • Arama veya sıralama işlemleri RAM gibi bellek üzerinde

Mustafa Kemal Üniversitesi

Arama ve Sıralama Algoritmaları

2.6-Hızlı Sıralama • Hızlı sıralama algoritması böl ve yönet mantığına dayanır; sıralanması

istenen dizi belirli bir sınır değerine göre iki alt diziye ayrılır. Sınır sayısından küçük olan elemanlar bir tarafa, büyük olan elemanlar diğer tarafa toplanır. Daha sonra yine hızlı sıralama algoritması kullanılarak, bu iki alt dizinin sıralanması istenir.

• Örnek: A={5,9,6,7,3,1,8}, Sınır değer 6 olsun. o A1={2,5,3,1} ve A2={9,7,8} .

o Bu diziler tekrar sınır değer seçilerek ikiye bölünür. Bu işlem dizi parçalanmayacak duruma gelene kadar devam eder.

• Fonksiyon 3 farklı parametre gerektirir. Biri diziyi içeren değişken, diğerleri de dizinin sıralamaya koyulacak parçasının sol ve sağ taraflarının indisi.

Page 31: Algoritma Geliştirme ve Veri Yapıları – 6myo.bartin.edu.tr/akgul/dersler/ybs207/veriyapilari6.pdf · Dahili Algoritma • Arama veya sıralama işlemleri RAM gibi bellek üzerinde

Mustafa Kemal Üniversitesi

Arama ve Sıralama Algoritmaları

2.6-Hızlı Sıralama

• Algoritma ilk çağrıldığında, n elemanlı bir dizi için sol=0, sag=n-1 olur. Rekürsif çağırmalar sırasında sol değer büyürken sağ değer küçülecektir. Ne zaman ki sol değeri sağ değerden büyük olursa dizide bölünecek eleman kalmadığı anlaşılmış olur.

• Hızlı sıralama algoritmasının en kötü durumdaki zaman karmaşıklığı O(n2) dir. Ancak ortalama zaman karmaşıklığı O(nlog2n) çıkmaktadır.

Page 32: Algoritma Geliştirme ve Veri Yapıları – 6myo.bartin.edu.tr/akgul/dersler/ybs207/veriyapilari6.pdf · Dahili Algoritma • Arama veya sıralama işlemleri RAM gibi bellek üzerinde

Mustafa Kemal Üniversitesi

Arama ve Sıralama Algoritmaları

hsirala(int dizi[], int sol, int sag) { register int k, j; int ortadaki, gecici;

/* Diziyi ikiye parçalama kısmı */ k=sol; j=sag; ortadaki=dizi[(sol+sag)/2)]; /* sınır değer */ do { while(dizi[k] < ortadaki && k<sag ) k++; while(ortadaki < dizi[j] && j>sol) j--;

if( k<=j ) { gecici=dizi[k]; dizi[k]=dizi[j]; dizi[j]=gecici; k++; j--; } }while( k<=j ); /* parçalama bitti */

if( sol<j ) hsirala(dizi, sol, j); if( k<sag ) hsirala(dizi, k, sag); }

Page 33: Algoritma Geliştirme ve Veri Yapıları – 6myo.bartin.edu.tr/akgul/dersler/ybs207/veriyapilari6.pdf · Dahili Algoritma • Arama veya sıralama işlemleri RAM gibi bellek üzerinde

Mustafa Kemal Üniversitesi

Arama ve Sıralama Algoritmaları

Herhangi bir sayı seçilir ve geri kalan sayılar arasından küçük olanlar sayının soluna büyük olanlar sayının sağına getirilerek sıralama tamamlanır.

Page 34: Algoritma Geliştirme ve Veri Yapıları – 6myo.bartin.edu.tr/akgul/dersler/ybs207/veriyapilari6.pdf · Dahili Algoritma • Arama veya sıralama işlemleri RAM gibi bellek üzerinde

Mustafa Kemal Üniversitesi

Arama ve Sıralama Algoritmaları

2.7-Turnuva Sıralaması

Page 35: Algoritma Geliştirme ve Veri Yapıları – 6myo.bartin.edu.tr/akgul/dersler/ybs207/veriyapilari6.pdf · Dahili Algoritma • Arama veya sıralama işlemleri RAM gibi bellek üzerinde

Mustafa Kemal Üniversitesi

Arama ve Sıralama Algoritmaları

2.7-Turnuva Sıralaması