yinelemeli sıralama algoritmaları

14
1 Yinelemeli Sıralama Algoritmaları • İçerik Kabarcık Sıralaması Seçmeli Sıralama Eklemeli Sıralama

Upload: jena

Post on 08-Jan-2016

63 views

Category:

Documents


2 download

DESCRIPTION

Yinelemeli Sıralama Algoritmaları. İçerik Kabarcık Sıralaması Seçmeli Sıralama Eklemeli Sıralama. Sıralama - Tanım. Neden Sıralama ?. Bilgisayar bilimlerinde sıralama algoritmaları en sık kullanılan algoritmalardandır. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Yinelemeli Sıralama Algoritmaları

1

Yinelemeli Sıralama Algoritmaları

• İçerik– Kabarcık Sıralaması– Seçmeli Sıralama– Eklemeli Sıralama

Page 2: Yinelemeli Sıralama Algoritmaları

2

Sıralama - Tanım

Page 3: Yinelemeli Sıralama Algoritmaları

3

Neden Sıralama?• Bilgisayar bilimlerinde sıralama algoritmaları en sık

kullanılan algoritmalardandır.– Büyük miktardaki veriye erişmek veya işlemek için kritik

önem taşır. Örneğin veritabanı sistemleri.– Bazı karmaşık algoritmaların ilk adımıdır.

• Veriye hızlı ulaşmak için sıralı tutulması yararlı olacaktır.

• Eleman sayısı N alan dizide ikili arama yaparken karmaşıklığın O(log N) olmasını sağlar.

• Dizideki k. Büyük elemanı ararken O(1) karmaşıklığında erişim sağlar.

• Yenilenen değerleri bulmak kolaylaşır.

• Dizindeki dosyalar genellikle sıralı saklanır.

• Sözlükteki kelimeler sıralıdır.

Page 4: Yinelemeli Sıralama Algoritmaları

4

Sıralama – Dikkat Edilmesi Gerekenler

• Bellek: Sıralama algoritmaları sıralama yaparken ekstra bellek kullanırlar mı?– Sıralama sırasında verinin bir kısmını veya tamamını

geçici olarak başka bir yere kopyalamamız gerekir mi?– Eğer sıralama algoritması O(1) düzeyinde bellek

gerektiriyorsa, bu algoritmaya yerinde(in place) sıralama algoritması denir.

• Kararlılık: Kararlı sıralama algoritmaları sıralanacak dizinin içinde değerleri birbirine eşit olan öğelerin birbirlerine göre olan konumlarını korur.– Ö.g. Verilen: İsme göre sıralı telefon rehberi . Ülkeye göre

sıraladığımızda, her ülke kendi içinde isme göre de sıralı mı?

– Veritabanı için son derece önemlidir – bir sonraki slayt

Page 5: Yinelemeli Sıralama Algoritmaları

5

Kararlılık – Neden?• İsmi göre sıralı aşağıdaki veri kayıtları dikkate

alındığında. Öğrenciler 1 veya 2. sınıfta(Ali, 1), (Mehmet, 2) (Nazan, 1), (Selim, 1), (Zeynep, 2)

• Verilerimizi sınıfa göre sıralayalım(Ali, 1), (Nazan, 1), (Selim, 1), (Mehmet, 2) (Zeynep, 2)– Veriler sınıfa göre sıralı– Sınıftaki öğrenciler de kendi aralarında isme göre sıralı.– Elde edilen sonuç kararlı sıralama algoritmasının örneğidir.

(Nazan, 1), (Ali, 1), (Selim, 1), (Zeynep, 2) (Mehmet, 2)– Veriler sınıfa göre sıralı– Fakat sınıftaki öğrenciler kendi aralarında isme göre sıralı

değil.– Elde edilen sonuç kararsız sıralama algoritmasının

örneğidir.

Page 6: Yinelemeli Sıralama Algoritmaları

6

Kabarcık Sıralaması• Fikir: i ve i+1 inci elemanları karşılaştırılır ve

eğer A[i] > A[i+1] ise yer değiştirilir.– Sıralı olmayan kısımda bastan sona kadar aynı

şekilde işlemi tekrarla.

• Örnek: Aşağıdaki sayıları sıralanacak olursa:– 21, 33, 7, 25– Başla: 21 33 7 25 // Başlangıç durumu– Tekrar1: 21 7 25 33 // En büyük eleman sona geliyor(4. yer) – Tekrar2: 7 21 25 33 // En büyük 2. eleman 3. yere– Tekrar3: 7 21 25 33 // En büyük 3. eleman 2. yere– Tekrar4: 7 21 25 33 // En büyük 4. eleman 1. yere

Page 7: Yinelemeli Sıralama Algoritmaları

7

Kabarcık Sıralaması/* tamsayılarda kabarcık sıralaması - sözde kod * A dizisi N tane tamsayı içeriyor */BubbleSort(int A[], int N){

for(int i=0; i<N; i++) {/* Sıralanmayan kısımda baştan sona kadar*/for(int j=1; j<(N-i); j++) {

/* Yandaki eleman sırasızsa, degistir */

if( A[j-1] > A[j] ) DEGIS(A[j-1],A[j]);} //bitti-içteki for

} //bitti-dıştaki for} //bitti-BubbleSort

• Kararlı? • Yerinde? • Karmaşıklık

=

EvetEvet

O(N2)

Page 8: Yinelemeli Sıralama Algoritmaları

8

Seçmeli Sıralama• Kabarcık sıralaması kararlı ve yerinde , fakat

karmaşıklık O(N2) – her adımda 1 den fazla eleman taşıyarak daha iyisini yapabilir miyiz?

• Fikir: Dizide en küçük elemanı arayın ve A[1] ile yer değiştirin. Kalan elemanları tekrar arayın ve en küçüğü seçin ve A[2] ile yer değiştirin. Bu işlemi son elemana ulaşıncaya kadar tekrarlayın.

• Örnek: Aşağıdaki diziyi sıralayın:– 21, 33, 7, 25

• Seçmeli sıralama karalı mı?– 7 yerine 33 olduğunu düşünelim Karalı değil

• Yerinde mi? Evet. – Değişimde kullanılan temp değişkeni için gereken alan

O(1).

• Karmaşıklık?– N + N-1 + N-2 + … 1 = N*(N+1)/2 = O(N2)

Page 9: Yinelemeli Sıralama Algoritmaları

9

Araya Sokma Sıralaması• Eğer ilk "k" eleman sıralı ise ne yapabiliriz.

– Ö.g. 4, 7, 12, 5, 19, 16

• Fikir: Bir sonraki elemanı uygun pozisyona yerleştir ve k+1 tane sıralı elamanın olsun. Bir sonrakini yerleştir k+2 tane sıralı elemanın olsun. Bu şekilde tüm elemanları diziye ekle.– 4, 5, 7, 12, 19, 16– 4, 5, 7, 12, 19, 16– 4, 5, 7, 12, 16, 19 Tamam!– Tüm dizi için, N-1 geçiş– Kart sıralamaya benzer:

• Kartları almaya başlayın (eliniz boş)• Almaya devam edin.

8A102

Sağa kaydır

Page 10: Yinelemeli Sıralama Algoritmaları

10

Araya Sokma Algoritması/* Tam sayılarda Araya Sokma Algoritması – Sözde kod A dizisinin N tane elemanı vardır */InsertionSort(int A[], int N){

int j, P, Tmp;for(P = 1; P < N; P++ ) {

Tmp = A[ P ];for(j = P; j > 0 && A[ j - 1 ] > Tmp; j-- ){

A[ j ] = A[ j - 1 ]; // A[j-1] elemanı sağa kaydır} //bitti-içteki forA[ j ] = Tmp; // A[P] (= Tmp) için uygun yer bulundu

} //bitti-dıştaki for} //bitti-InsertionSort

• Yerinde (Tmp için O(1) yer gerekli) ve kararlı• Karmaşıklık:

• En Kötü – Ters sıralı dizi = O(N2)• En iyi – Sıralı dizi = O(N).

Page 11: Yinelemeli Sıralama Algoritmaları

11

Özet• Basit sıralama algoritmaları :

– Kabarçık sıralaması - O(N2)– Seçmeli sıralama - O(N2)– Araya sokma sıralaması - O(N2)

– Araya sokma sıralaması küçük boyutlu veri için (~20) pratikte en iyi sonucu verir.

Page 12: Yinelemeli Sıralama Algoritmaları

Uygulama• Derste gördüğünüz sıralama

algoritmalarını Java programlama dilinde yazınız.– 100 000 tane rastgele üretilen sayıyı her bir

sıralama algoritmaları ile sıralayınız. – Sıralama için geçen süreyi gözlemleyiniz.– Süre ölçümü için bir sonraki slayt.

12

Page 13: Yinelemeli Sıralama Algoritmaları

Uygulama (devam)• Çalışama süresi hesaplama

– Java programlama dilinde bir işlemin ne kadar süreceğini ölçmek için aşağıdaki yapı kullanılabilir.

13

// kronometreyi başlatlong bas = System.currentTimeMillis();

// işlemler yapılıyor.

// kronometreyi durdur.long son = System.currentTimeMillis();

long gecenSure = son-bas; //milisaniye

Page 14: Yinelemeli Sıralama Algoritmaları

Uygulama (devam) – Genel Yapı

main(){ A[100000] = sayı üret kabarcık sıralaması için süre ölçümü seçmeli sıralama için süre ölçümü araya sokma sıralaması için süre ölçümü

süreleri ekrana yazdır.}

14