10-sıralama algoritmaları

28
1 Sıralama Algoritmaları Birçok uygulamada veri dizilerinin, belirli sırada olması istenir. Veriler sayısal ise küçükten büyüğe veya büyükten küçüğe, alfa sayısal ise A’dan Z’ ye veya Z’ den A’ ya doğru sıralanabilir. Sıralı veriler üzerinde işlem/değerlendirme yapmak çok daha hızlı ve kolaydır. Günümüz bilgisayarlarında kullanılan algoritmaların önemli bir bölümünün sıralama algoritmalarına gereksinim duyması sıralama algoritmalarının önemini ortaya koymaktadır. Günlük hayattan örnek olarak, hayatın her alanında kullanılan veritabanlarının düzenlenmesi, güncellenmesi ve arama işlemlerinin çok hızlı yapılabilmesi için veri alanlarının doğru bir biçimde sıralanması gereklidir.

Upload: frhtngn

Post on 18-Apr-2015

168 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: 10-sıralama algoritmaları

1

Sıralama Algoritmaları

• Birçok uygulamada veri dizilerinin, belirli sırada olması istenir. Veriler sayısal ise küçükten büyüğe veya büyükten küçüğe, alfa sayısal ise A’dan Z’ ye veya Z’ den A’ ya doğru sıralanabilir.

• Sıralı veriler üzerinde işlem/değerlendirme yapmak çok daha hızlı ve kolaydır.

• Günümüz bilgisayarlarında kullanılan algoritmaların önemli bir bölümünün sıralama algoritmalarına gereksinim duyması sıralama algoritmalarının önemini ortaya koymaktadır.

• Günlük hayattan örnek olarak, hayatın her alanında kullanılan veritabanlarının düzenlenmesi, güncellenmesi ve arama işlemlerinin çok hızlı yapılabilmesi için veri alanlarının doğru bir biçimde sıralanması gereklidir.

Page 2: 10-sıralama algoritmaları

2

Sıralama Algoritmaları

• Aynı sıralama probleminin çözümünde farklı araştırmacılar tarafından ortaya konmuş çeşitli sıralama algoritmaları mevcuttur.

• Bunların her birinin diğerlerine kıyasla kullanım alanına göre üstünlükleri ve eksik yönleri olmaktadır.

• Çoklu veriler içerisinde, istenilen bilgiyi aramak programlarda en sık karşılaşılan işlemlerden biridir. Herhangi bir veri yığınında, ilgili bilgiye ulaşmak için değişik algoritmalar kullanılır.

• Bu bölümde birkaç popüler sıralama ve arama algoritması anlatılacak ve dizilerde kullanımı gösterilecektir.

• Dizilerde sıralama ve arama algoritmaları aşağıda gösterimleri sayısal değerler üzerinden yapılmasına rağmen, hem sayısal hem de alfa sayısal bilgiler için aynı şekilde çalışır.

Page 3: 10-sıralama algoritmaları

3

Seçme sıralama (selection sort) algoritması

• Seçme sıralama (selection sort) en basit sıralama algoritmalarındandır.

• Dizideki ilk elemandan başlanır. Seçilen dizi elemanı ile bu elemandan sonra gelen dizi elemanları sırası ile karşılaştırılır. Eğer küçüklük/büyüklük (sıralama isteğine bağlı olarak) durumu var ise yerleri değiştirilir.

• İkinci etapta dizinin ikinci elemanı ile bu elemandan sonra gelen dizi elemanları sırası ile karşılaştırılır ve aynı şekilde eğer küçüklük/büyüklük durumu var ise yerleri değiştirilir.

• Bu karşılaştırma işlemi sondan bir önceki eleman ile son elemanın karşılaştırılmasına kadar devam eder ve aynı şekilde eğer küçüklük/büyüklük durumu var ise yerleri değiştirilir.

Page 4: 10-sıralama algoritmaları

4

Örnek:a[i]={30,51,32,17,53}

1. adım

30 30 30 17

51 51 51 51

32 32 32 32

17 17 17 30

53 53 53 53

Page 5: 10-sıralama algoritmaları

5

Seçme sıralama (selection sort) algoritması

2. adım

17 17 17

51 32 30

32 51 51

30 30 32

53 53 53

Page 6: 10-sıralama algoritmaları

6

Seçme sıralama (selection sort) algoritması

3.adım

17 17

30 30

51 32

32 51

53 53

Page 7: 10-sıralama algoritmaları

7

Seçme sıralama (selection sort) algoritması

4.adım

17

30

32

51

53

Page 8: 10-sıralama algoritmaları

8

Seçme sıralama (selection sort) algoritması

• for(i=1;i<n;i++)• {for(j=i+1;j<=n;j++)• {if(A[j]<A[i]) • {b=A[i]; A[i]=A[j]; A[j]=b;}

• }• }

Page 9: 10-sıralama algoritmaları

9

Seçme sıralama (selection sort) algoritması

• Küçükten büyüğe doğru sıralama yapan seçme sıralama (selection sort) algoritması için akış diyagramını çizelim;

Page 10: 10-sıralama algoritmaları

10

Seçme sıralama (selection sort) algoritması

C/C++ Programı;

#include <stdio.h>

#include <conio.h>

int i,j,n,b;

int A[100];

void main(void)

{clrscr();

printf("dizi eleman sayisi:");

scanf("%d",&n);

for(i=1;i<=n;i++)

{ printf("A[%d]: ",i);

scanf("%d",&A[i]);

printf(" \n"); }

Page 11: 10-sıralama algoritmaları

11

Seçme sıralama (selection sort) algoritması

for(i=1;i<n;i++)

{for(j=i+1;j<=n;j++)

{if(A[j]<A[i])

{b=A[i];

A[i]=A[j];

A[j]=b;}

}

}

Page 12: 10-sıralama algoritmaları

12

Seçme sıralama (selection sort) algoritması

• for(i=1;i<=n;i++)• { printf("%d ",A[i]);} • printf(" \n");• getch();• }

Page 13: 10-sıralama algoritmaları

13

Algoritma karmaşıklığı Seçme sıralama (selection sort)

• 1. Adımda n-1 karşılaştırma

• 2. adımda n-2 karşılaştırma

• 3. adımda n-3 karşılaştırma

• :

• :

• N-1. adımda 1 karşılaştırma

Page 14: 10-sıralama algoritmaları

14

Algoritma karmaşıklığı Seçme sıralama (selection sort)

)(

2

1

2

1

2

*)1(

2

2

1

1

nO

nn

nni

n

i

Page 15: 10-sıralama algoritmaları

15

Algoritma karmaşıklığı Seçme sıralama (selection sort)

• Seçmeli sıralama algoritması, dizi sıralı bir dizi olsa bile dizinin tüm elemanları üzerinden işletilmektedir.

Page 16: 10-sıralama algoritmaları

16

Kabarcık sıralama (bubble sort) algoritması

• Bu algoritma başlangıçta yer değiştirme(exchange) sıralaması olarak adlandırılmıştır. Günümüzde kabarcık sıralaması olarak adlandırılmasının nedeni dizi içindeki büyük elemanların algoritmanın her adımında dizi sonuna doğru lineer olarak ilerlemesidir.

• Bu algoritmada baştan sona doğru yapılan taramalar ile arka arkaya gelen (ardışık) elemanlar kıyaslanır. Eğer küçüklük/büyüklük durumu var ise yerleri değiştirilir.

Page 17: 10-sıralama algoritmaları

17

Kabarcık sıralama (bubble sort) algoritması

• Küçükten büyüğe doğru sıralama yapan kabarcık sıralama (bubble sort) algoritması için akış diyagramını çizelim;

Page 18: 10-sıralama algoritmaları

18

Kabarcık sıralama (bubble sort) algoritması

• Bu sıralama algoritmasının C/C++ Programı;

#include <stdio.h>

#include <conio.h>

int i,j,n,b;

int A[100];

void main(void)

{ clrscr();

printf("dizi eleman sayisi:");

scanf("%d",&n);

for(i=1;i<=n;i++)

{ printf("A[%d]: ",i);

scanf("%d",&A[i]);

printf(" \n"); }

Page 19: 10-sıralama algoritmaları

19

Kabarcık sıralama (bubble sort) algoritması

Bu sıralama algoritmasının C/C++ Programı;

for(i=1;i<=n;i++)

{ for(j=1;j<n;j++)

{ if(A[j+1]<A[j])

{ b=A[j];

A[j]=A[j+1];

A[j+1]=b;}

}

}

for(i=1;i<=n;i++)

{ printf("%d ",A[i]);

}

printf(" \n");

getch();

}

Page 20: 10-sıralama algoritmaları

20

Örnek: a[i]={5,4,3,2,1}

1. Adım

5 4 4 4 4

4 5 3 3 3

3 3 5 2 2

2 2 2 5 1

1 1 1 1 5

Page 21: 10-sıralama algoritmaları

21

Kabarcık sıralama (bubble sort) algoritması

2. Adım

4 3 3 3

3 4 2 2

2 2 4 1

1 1 1 4

5 5 5 5

Page 22: 10-sıralama algoritmaları

22

Kabarcık sıralama (bubble sort) algoritması

3. Adım

3 2 2

2 3 1

1 1 3

4 4 4

5 5 5

Page 23: 10-sıralama algoritmaları

23

Kabarcık sıralama (bubble sort) algoritması

4.Adım

2 1

1 2

3 3

4 4

5 5

Page 24: 10-sıralama algoritmaları

24

Kabarcık sıralama (bubble sort) algoritması

1

2

3

4

5

Page 25: 10-sıralama algoritmaları

25

Kabarcık sıralama (bubble sort) algoritması

• Bu örnekte 5 elemanlı ve ters sıralı bir dizinin 4 adımda sıralandığı görülmüştür.

• 1. adım:4 karşılaştırma ve 4 yerdeğiştirme

• 2. adım:3 karşılaştırma ve 3 yerdeğiştirme

• 3. adım:2 karşılaştırma ve 2 yerdeğiştirme

• 4. adım:1 karşılaştırma ve 1 yerdeğiştirme

Page 26: 10-sıralama algoritmaları

26

(Bubble sort) Algoritma karmaşıklığı

• En kötü durumda • 1. Adımda n-1 karşılaştırma• 2. adımda n-2 karşılaştırma• 3. adımda n-3 karşılaştırma• :• :• N-1. adımda 1 karşılaştırma

Page 27: 10-sıralama algoritmaları

27

(Bubble sort) Algoritma karmaşıklığı

)(

2

1

2

1

2

*)1(

2

2

1

1

nO

nn

nni

n

i

Page 28: 10-sıralama algoritmaları

28

Özet

• Seçmeli Sıralama ve Kabarcık sıralama Algoritmaları işleyiş bakımından basit algoritmalar olmasına karşılık karmaşıklık düzeyi n2 mertebesindedir.

• Veri sayısındaki 5 kat arışa karşılık bu algoritmalardaki yapılan temel işlem sayıları 25 katlık bir artış göstermektedir.

• Veri sayısının az olduğu uygulamalarda kullanılabilir.