Upload
frhtngn
View
179
Download
2
Embed Size (px)
Citation preview
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.
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.
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.
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
►
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
►
6
Seçme sıralama (selection sort) algoritması
3.adım
17 17
30 30
51 32
32 51
53 53
►
7
Seçme sıralama (selection sort) algoritması
4.adım
17
30
32
51
53
►
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;}
• }• }
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;
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"); }
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;}
}
}
12
Seçme sıralama (selection sort) algoritması
• for(i=1;i<=n;i++)• { printf("%d ",A[i]);} • printf(" \n");• getch();• }
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
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
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.
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.
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;
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"); }
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();
}
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
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
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
23
Kabarcık sıralama (bubble sort) algoritması
4.Adım
2 1
1 2
3 3
4 4
5 5
24
Kabarcık sıralama (bubble sort) algoritması
1
2
3
4
5
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
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
27
(Bubble sort) Algoritma karmaşıklığı
)(
2
1
2
1
2
*)1(
2
2
1
1
nO
nn
nni
n
i
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.