SlideShare a Scribd company logo
1 of 8
Download to read offline
Karabük Üniversitesi
BLM112
PROGRAMLAMA DİLLERİ II
SIRALAMA ALGORİTMALARI
Bilgisayar saklama ünitelerinde tutulan verilerin performansı yüksek bir şekilde işlenebilmesi
için en kısa zamanda ulaşılabilir özellikte olması gerekir. Verilere hızlı erişmek için kullanılan
yöntemlerinden biri de sıralamadır. Veriler, sıralanmak suretiyle ilgili veriye erişilme zamanı
hızlandırılabilir. Sıralama, sayısal ortamdaki sayı veya katar verilerinin, bir anahtar kriterine
göre yapılan düzenlemedir. Anahtar, bir sayı değeri olabileceği gibi bir kelime veya bir katar
olabilir.
Verileri sıralamak maksadıyla geliştirilmiş birçok sıralama algoritması vardır. Geliştirilecek
uygulamaya bağlı olarak seçilen veri yapısı, veri kümesindeki toplam veri sayısı gibi özellikler
kullanılacak sıralama algoritmasını belirler. Sıralama yapılırken en çok kullanılan algoritmalar
seçim, araya yerleştirme, kabarcık algoritmalarıdır.
1.1. Seçim Algoritması
Seçim (selection) sıralama algoritmasında belirlenen kritere göre en uygun 1. veri, en uygun
2. Veri, … değerleri bulunarak veriler küme içinde yer değiştirilerek sıralama gerçekleştirilir.
Örneğin sayilar dizisinde tutulan 5 tane sayının büyükten küçüğe seçim algoritması
kullanarak sıralanması istenirse; önce sayilar dizisinin en büyük elemanı bulunur ve dizinin 1.
elemanı yapılır, daha sonra sayilar dizisinin 2. en büyük elemanı bulunur ve dizinin 2.
elemanı yapılır ve bu süreç dizinin son elemanı bulunana kadar devam eder. İşlem bittiğinde
veri kümesindeki elemanlar sıralanmış olur. Aşağıdaki şekilde bellekte tutulan değer
hareketleri gösterilmiştir. Algoritma her bir adımda konuma ait değerin bulunması için bir
döngü, diğer adımlara geçebilmek için bir döngü olmak üzere iç içe iki döngü kullanılmalıdır.
Şart sağlandığında dizide yer alan elmanı kaybetmemek için bir tane tampon değişken
kullanılmalıdır.
Örnek: sayilar={10, 22, 9, 35, 14}
Adım 1
sayilar
[0] 10
[1] 22
[2] 9
[3] 35
[4] 14
Dizinin 0.
Konumunda
bulunan değer
sırayla kendinden
sonraki elemanlar
ile karşılaştırılır ve
küçük olduğu
eleman ile yer
değiştirir. Böylece
dizinin en büyük
elemanı 0. konuma
Adım 2
sayilar
[0] 35
[1] 10
[2] 9
[3] 22
[4] 14
Dizinin 1.
konumunda
bulunan değer
sırayla kendinden
sonraki elemanlar
ile karşılaştırılır ve
küçük olduğu
eleman ile yer
değiştirir. Böylece
dizinin en büyük 2.
elemanı 1. konuma
Adım 3
Sayilar
[0] 35
[1] 22
[2] 9
[3] 10
[4] 14
Dizinin 2.
konumunda
bulunan değer
sırayla kendinden
sonraki elemanlar
ile karşılaştırılır ve
küçük olduğu
eleman ile yer
değiştirir. Böylece
dizinin en büyük 3.
elemanı 2. konuma
Adım 4
sayilar
[0] 35
[1] 22
[2] 14
[3] 9
[4] 10
Dizinin 3.
konumunda
bulunan değer
sırayla kendinden
sonraki elemanlar
ile karşılaştırılır ve
küçük olduğu
eleman ile yer
değiştirir. Böylece
dizinin en büyük 4.
elemanı 3. konuma
İşlem sonu
sayilar
[0] 35
[1] 22
[2] 14
[3] 10
[4] 9
Dizinin 4. (son)
konumunda
bulunan değer ile
ilgili işlem yapılmaz.
yerleştirilir. yerleştirilir. yerleştirilir. yerleştirilir.
Örnek 2:
void selection(int sayi[N])
{
int i,j,buffer;
for(i=0;i<N-1;i++){
for(j=i+1;j<N;j++){
if(sayi[i]<sayi[j])
{
buffer=sayi[i];
sayi[i]=sayi[j];
sayi[j]=buffer;
}
}
}
}
Ödev: 24 kişilik bir sınıfta bulunan öğrencilerin numaraları ve matematik dersinden aldıkları
puanlar bir diziye klavyeden giriliyor. Bu sınıftaki öğrencilerin numaralarını ve puanlarını,
seçim algoritması kullanarak aldıkları puana göre küçükten büyüğe sıralayıp, ekranda
gösteren programı hazırlayınız.
1.2. Araya Yerleştirme Algoritması
Araya yerleştirme (insertion) sıralama algoritmasında belirlenen kritere göre sıralanacak veri
kümesi alt kümeleri ayrılarak sıralama gerçekleştirilir. Bu algoritmada alt kümeler kümenin 1.
Elemanı ile 2. Elemanı, kümenin 1. Elemanı ile 3. Elemanı arasındaki elemanlar, kümenin 1.
Elemanı ile 4. Elemanı arasındaki elemanlar biçiminde ve son elemana kadar olmak üzere
olan birliklerdir. Algoritmanın 1. Adımında ilk küme, 2. Adımında ikinci küme şeklinde devam
edilerek son adımda sıralı veri kümesi elde edilir. Aşağıdaki örnekte sayilar kümesinin araya
sokma algoritması kullanılarak büyükten küçüğe sıralama işlemleri ve bellek değerleri
gösterilmiştir.
Örnek: sayilar={10, 22, 9, 35, 14}
İşlem basamakları İşlem Öncesi İşlem sonrası
1. Adım 10 22 9 35 14 22 10 9 35 14
2. Adım 22 10 9 35 14 22 10 9 35 14
3. Adım 22 10 9 35 14 35 22 10 9 14
4. Adım 35 22 10 9 14 35 22 14 10 9
Araya yerleştirme algoritması, sıralı haldeki dizilere, oluşturulmuş sıralama bozulmadan
eleman eklemek için uygun bir algoritmadır. Bu algoritmanın en önemli dezavantajı eklenen
elemanın, uygun konuma yerleştirilirken kendinden sonra gelecek elemanların küme
içerisinde kaydırma gerekliliğidir. Örneğin bu işlem dosyalar üzerinden gerçekleştiriliyorsa,
dosya için birçok defa oku/yaz işlemleri tekrarlanacaktır. Bu durum istenmeyen bir
performans kaybına neden olabilir.
Örnek 2:
void insert(int sayi[N])
{
int i,j,buffer;
for(i=1;i<N;i++)
{
buffer=sayi[i];
j=i;
while(j>0 && sayi[j-1]<buffer)
{
sayi[j]=sayi[j-1];
j--;
}
sayi[j]=buffer;
}
}
Ödev: Bir sayı dizisinde 10 adet sayı küçükten büyüğe sıralanmış olarak tutulmaktadır. Bu
sayı dizisine dışarıdan 4 tane eleman girilecek fakat her eleman sıralama bozulmadan uygun
konuma yerleştirilecektir. Bu işlemi yapan programı hazırlayınız.
1.3. Kabarcık Sıralaması
Kabarcık sıralama (bubble sort) algoritmasında belirlenen kritere göre veri kümesinde
bulunan art arda bulunan elemanlar sondan başa veya baştan sona doğru birbirleriyle
karşılaştırılarak sonuca ulaşılır. Bu algoritma için seçim algoritmasında olduğu gibi iki döngü
kullanılır. İlk döngüde işlenen elemanın küme içerisindeki konumu belirlenir. 2. Döngü ile
küme içerisinde yer alan bütün elemanlara 1. döngüde yapılan işlemlerin tatbik edilmesi
sağlanır. Bu döngüler iç içedir. Aşağıdaki örnekte sayilar kümesinin kabarcık sıralama
algoritması kullanılarak büyükten küçüğe sıralama işlemleri ve bellek değerleri gösterilmiştir.
Kabarcık algoritması ilk elemandan başlatılmıştır; fakat sondan da başlatılabilir.
Örnek: sayilar={10, 22, 9, 35, 14}
Adım 1
sayilar
[0] 10
[1] 22
[2] 9
[3] 35
[4] 14
Dizinin 0.
konumunda
bulunan değer ile
komşusu
karşılaştırılır ve şart
sağlanırsa yer
değiştirilir. Sonra 1.
İle komşusu
karşılaştırılır ve şart
sağlanırsa yer
değiştirilir. Küme
sonuna kadar işlem
sürdürülür. Böylece
dizinin en küçük
elemanı yerleştirilir.
Adım 2
sayilar
[0] 22
[1] 10
[2] 35
[3] 14
[4] 9
Dizinin 1.
konumunda
bulunan değer
sırayla kendinden
sonraki elemanlar
ile karşılaştırılır ve
küçük olduğu
eleman ile yer
değiştirir. Böylece
dizinin en büyük 2.
elemanı 1. konuma
yerleştirilir.
Adım 3
sayilar
[0] 22
[1] 35
[2] 14
[3] 10
[4] 9
Dizinin 2.
konumunda
bulunan değer
sırayla kendinden
sonraki elemanlar
ile karşılaştırılır ve
küçük olduğu
eleman ile yer
değiştirir. Böylece
dizinin en büyük 3.
elemanı 2. konuma
yerleştirilir.
Adım 4
sayilar
[0] 35
[1] 22
[2] 14
[3] 10
[4] 9
Dizinin 3.
konumunda
bulunan değer
sırayla kendinden
sonraki elemanlar
ile karşılaştırılır ve
küçük olduğu
eleman ile yer
değiştirir. Böylece
dizinin en büyük 4.
elemanı 3. konuma
yerleştirilir.
İşlem sonu
sayilar
[0] 35
[1] 22
[2] 14
[3] 10
[4] 9
Örnek 2:
void bubble(int sayi[N])
{
int i,j,buffer;
for(i=0;i<N-1;i++){
for(j=0;j<N-1-i;j++){
if(sayi[j]<sayi[j+1])
{
buffer=sayi[j];
sayi[j]=sayi[j+1];
sayi[j+1]=buffer;
}
}
}
}
Ödev: Klavyeden girilen 100 tane sayıyı, kabarcık sıralama algoritmasını sondan başa doğru
uygulayarak, küçükten büyüğe sıralayıp ekranda gösteren programı hazırlayınız.
1.4. Alfabetik Sıralama
Sıralama yapılırken verinin içeriği yani sayı veya katar olması, karşılaştırma işlemini temelde
etkilemez. Yukarıda sayılara uygulanan sıralama algoritmaları, alfabetik sıralama için de
kullanılabilir. Fakat karşılaştırma yapılırken kullanılacak operatörün katar verilerine uygun
olması gerekir. Bu işlem için strcmp() fonksiyonu kullanılır. strcmp(), arşılaştırılan iki veri
aynıysa 0, farklı ise üzerinde bulundurduğu karakterlerin alfabetik sıradaki konumlarına göre
pozitif veya negatif bir değer döndürür.
Ödev: Klavyeden girilen 10 adet isim değerleri bir kümede tutulmaktadır. Bu isimleri alfabetik
artan (A’dan Z’ye doğru) sıralama yaparak ekranda gösteren programı seçim algoritması
kullanarak gerçekleştiriniz.
1.5. Hızlı (Quick, Pivot) Sıralama
Hızlı sıralama algoritması böl ve yönet politikasına dayanır; sıralanması istenen dizi belirli bir
karşılaştırma (pivot) değerine göre iki alt diziye ayrılır. İkiye ayırma işlemi, bu karşılaştırma
değerinden küçük olan elemanlar bir tarafta, büyük olan elemanlar diğer tarafta yerleştirilerek yapılır.
Bu işlem geriye kalan her bölme üzerinde tekrarlanır. Karşılaştırma değeri ya rastgele seçilir ya da
dizideki az sayıda elemanın değerinin ortalaması alınır. Hızlı sıralama algoritması en etkin (en hızlı
çalışan) algoritma olmasına rağmen az sayıda elemana sahip dizilerde veya zaten neredeyse sıralı
olan dizilerde tekrarlanan çağrılardan dolayı tercih edilmeyebilir. Hızlı arama algoritmasında recursive
(özyinelemeli) yapı kullanılır.
Hızlı sıralama algoritmasını kullanarak dizi elemanlarını artan şekilde sıralamak için gerekli işlem
basamakları:
1. İlk olarak sıralanacak diziyi ikiye bölmek için bir pivot (karşılaştırma değeri) seçilir. Pivot
genellikle verilen dizinin ilk elemanı ya da son elemanı olabilir. Dizide pivottan büyük
elemanlar pivotun sağına (üst), pivottan küçük elemanlar ise pivotun soluna (alt) konur. Pivot
ise oluşan bu iki kümenin ortasına (orta) yerleşir. Böylece verilen dizi birbirinden bağımsız
olarak iki alt diziye ayrılmış olur.
2. Hızlı sıralama algoritması bağımsız bu iki alt dizi (üst ve alt) içerisinde de recursive olarak
çağrılır ve bu diziler kendi içerisinde 1.adım tekrarlanarak ikiye ayrılırlar. Bu işlemler diziler
parçalanmayacak duruma gelene kadar tekrarlanır.
Alt Orta Üst
A Dizisi
Örneğin;
Sıralanacak dizi;
Başlangıç
Durumu;
1.Adım
2.Adım
3.Adım
4.Adım
5.Adım
1. Sıralanacak dizinin son sayısı (13) pivot elemanı (karşılaştırma) olarak seçilir. Bu eleman daha
sonraki arama ve yer değiştirme işlemlerine tabi olmaz.
2. Sol başta pivot elemanı 13’ten büyük olan ilk sayı bulunur ve sağ baştan 13’den küçük ilk sayı
bulunur. Daha sonra bu iki sayı yer değiştirilir.
3. Soldan pivot elemanından (13) büyük ve sağdan pivot elemanından küçük sayılar ortada
buluşana kadar 2.adım tekrarlanır.
4. 3.adımda soldan 13’ ten büyük ve sağdan 13’ten küçük sayılar ortada buluştuğu için (5 ve 83)
13 ile 83 yer değiştirir. Pivotun solundaki alt dizi ve sağındaki üst dizi kendi içinde aynı
teknikle sıralanır.
void quick(int sayi[], int start, int end, int pivot)
{
int location,bound;
if (start < end)
{
pivot = sayi[end];
location = start;
bound = end;
while (location < bound)
{
if (sayi[location] > pivot)
Pivot
elemanından
küçük
elemanlar
Pivot
elemanı
Pivot
elemanından
büyük
elemanlar
14 5 83 23 4 87 13
14 5 83 23 4 87 13
4 5 83 23 14 87 13
4 5 83 23 14 87 13
4 5 13 23 14 87 83
Alt dizi sıralanır. 13 Üst dizi sıralanır.
4 5 13 14 23 83 87
Pivot
Soldan 13’den
büyük ve sağdan
13’den küçük
sayılar ortada
buluştuğu veya
çakıştığı için
pivotun yeri
bulunmuş olur ve
araya yerleştirilir.
{
++location;
}
else
{
sayi[bound] = sayi[location];
sayi[location] = sayi[bound - 1];
--bound;
}
}
sayi[bound] = pivot;
quick(sayi, start, bound - 1, pivot);
quick(sayi, bound + 1, end, pivot);
}
}

More Related Content

Featured

2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by Hubspot2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by HubspotMarius Sescu
 
Everything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPTEverything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPTExpeed Software
 
Product Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage EngineeringsProduct Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage EngineeringsPixeldarts
 
How Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthHow Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthThinkNow
 
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfAI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfmarketingartwork
 
PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024Neil Kimberley
 
Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)contently
 
How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024Albert Qian
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsKurio // The Social Media Age(ncy)
 
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Search Engine Journal
 
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summarySpeakerHub
 
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd Clark Boyd
 
Getting into the tech field. what next
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next Tessa Mero
 
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentLily Ray
 
Time Management & Productivity - Best Practices
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best PracticesVit Horky
 
The six step guide to practical project management
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project managementMindGenius
 
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...RachelPearson36
 

Featured (20)

2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by Hubspot2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by Hubspot
 
Everything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPTEverything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPT
 
Product Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage EngineeringsProduct Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage Engineerings
 
How Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthHow Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental Health
 
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfAI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
 
Skeleton Culture Code
Skeleton Culture CodeSkeleton Culture Code
Skeleton Culture Code
 
PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024
 
Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)
 
How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie Insights
 
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024
 
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary
 
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd
 
Getting into the tech field. what next
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next
 
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search Intent
 
How to have difficult conversations
How to have difficult conversations How to have difficult conversations
How to have difficult conversations
 
Introduction to Data Science
Introduction to Data ScienceIntroduction to Data Science
Introduction to Data Science
 
Time Management & Productivity - Best Practices
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best Practices
 
The six step guide to practical project management
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project management
 
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
 

Ders notları 2

  • 2. SIRALAMA ALGORİTMALARI Bilgisayar saklama ünitelerinde tutulan verilerin performansı yüksek bir şekilde işlenebilmesi için en kısa zamanda ulaşılabilir özellikte olması gerekir. Verilere hızlı erişmek için kullanılan yöntemlerinden biri de sıralamadır. Veriler, sıralanmak suretiyle ilgili veriye erişilme zamanı hızlandırılabilir. Sıralama, sayısal ortamdaki sayı veya katar verilerinin, bir anahtar kriterine göre yapılan düzenlemedir. Anahtar, bir sayı değeri olabileceği gibi bir kelime veya bir katar olabilir. Verileri sıralamak maksadıyla geliştirilmiş birçok sıralama algoritması vardır. Geliştirilecek uygulamaya bağlı olarak seçilen veri yapısı, veri kümesindeki toplam veri sayısı gibi özellikler kullanılacak sıralama algoritmasını belirler. Sıralama yapılırken en çok kullanılan algoritmalar seçim, araya yerleştirme, kabarcık algoritmalarıdır. 1.1. Seçim Algoritması Seçim (selection) sıralama algoritmasında belirlenen kritere göre en uygun 1. veri, en uygun 2. Veri, … değerleri bulunarak veriler küme içinde yer değiştirilerek sıralama gerçekleştirilir. Örneğin sayilar dizisinde tutulan 5 tane sayının büyükten küçüğe seçim algoritması kullanarak sıralanması istenirse; önce sayilar dizisinin en büyük elemanı bulunur ve dizinin 1. elemanı yapılır, daha sonra sayilar dizisinin 2. en büyük elemanı bulunur ve dizinin 2. elemanı yapılır ve bu süreç dizinin son elemanı bulunana kadar devam eder. İşlem bittiğinde veri kümesindeki elemanlar sıralanmış olur. Aşağıdaki şekilde bellekte tutulan değer hareketleri gösterilmiştir. Algoritma her bir adımda konuma ait değerin bulunması için bir döngü, diğer adımlara geçebilmek için bir döngü olmak üzere iç içe iki döngü kullanılmalıdır. Şart sağlandığında dizide yer alan elmanı kaybetmemek için bir tane tampon değişken kullanılmalıdır. Örnek: sayilar={10, 22, 9, 35, 14} Adım 1 sayilar [0] 10 [1] 22 [2] 9 [3] 35 [4] 14 Dizinin 0. Konumunda bulunan değer sırayla kendinden sonraki elemanlar ile karşılaştırılır ve küçük olduğu eleman ile yer değiştirir. Böylece dizinin en büyük elemanı 0. konuma Adım 2 sayilar [0] 35 [1] 10 [2] 9 [3] 22 [4] 14 Dizinin 1. konumunda bulunan değer sırayla kendinden sonraki elemanlar ile karşılaştırılır ve küçük olduğu eleman ile yer değiştirir. Böylece dizinin en büyük 2. elemanı 1. konuma Adım 3 Sayilar [0] 35 [1] 22 [2] 9 [3] 10 [4] 14 Dizinin 2. konumunda bulunan değer sırayla kendinden sonraki elemanlar ile karşılaştırılır ve küçük olduğu eleman ile yer değiştirir. Böylece dizinin en büyük 3. elemanı 2. konuma Adım 4 sayilar [0] 35 [1] 22 [2] 14 [3] 9 [4] 10 Dizinin 3. konumunda bulunan değer sırayla kendinden sonraki elemanlar ile karşılaştırılır ve küçük olduğu eleman ile yer değiştirir. Böylece dizinin en büyük 4. elemanı 3. konuma İşlem sonu sayilar [0] 35 [1] 22 [2] 14 [3] 10 [4] 9 Dizinin 4. (son) konumunda bulunan değer ile ilgili işlem yapılmaz.
  • 3. yerleştirilir. yerleştirilir. yerleştirilir. yerleştirilir. Örnek 2: void selection(int sayi[N]) { int i,j,buffer; for(i=0;i<N-1;i++){ for(j=i+1;j<N;j++){ if(sayi[i]<sayi[j]) { buffer=sayi[i]; sayi[i]=sayi[j]; sayi[j]=buffer; } } } } Ödev: 24 kişilik bir sınıfta bulunan öğrencilerin numaraları ve matematik dersinden aldıkları puanlar bir diziye klavyeden giriliyor. Bu sınıftaki öğrencilerin numaralarını ve puanlarını, seçim algoritması kullanarak aldıkları puana göre küçükten büyüğe sıralayıp, ekranda gösteren programı hazırlayınız. 1.2. Araya Yerleştirme Algoritması Araya yerleştirme (insertion) sıralama algoritmasında belirlenen kritere göre sıralanacak veri kümesi alt kümeleri ayrılarak sıralama gerçekleştirilir. Bu algoritmada alt kümeler kümenin 1. Elemanı ile 2. Elemanı, kümenin 1. Elemanı ile 3. Elemanı arasındaki elemanlar, kümenin 1. Elemanı ile 4. Elemanı arasındaki elemanlar biçiminde ve son elemana kadar olmak üzere olan birliklerdir. Algoritmanın 1. Adımında ilk küme, 2. Adımında ikinci küme şeklinde devam
  • 4. edilerek son adımda sıralı veri kümesi elde edilir. Aşağıdaki örnekte sayilar kümesinin araya sokma algoritması kullanılarak büyükten küçüğe sıralama işlemleri ve bellek değerleri gösterilmiştir. Örnek: sayilar={10, 22, 9, 35, 14} İşlem basamakları İşlem Öncesi İşlem sonrası 1. Adım 10 22 9 35 14 22 10 9 35 14 2. Adım 22 10 9 35 14 22 10 9 35 14 3. Adım 22 10 9 35 14 35 22 10 9 14 4. Adım 35 22 10 9 14 35 22 14 10 9 Araya yerleştirme algoritması, sıralı haldeki dizilere, oluşturulmuş sıralama bozulmadan eleman eklemek için uygun bir algoritmadır. Bu algoritmanın en önemli dezavantajı eklenen elemanın, uygun konuma yerleştirilirken kendinden sonra gelecek elemanların küme içerisinde kaydırma gerekliliğidir. Örneğin bu işlem dosyalar üzerinden gerçekleştiriliyorsa, dosya için birçok defa oku/yaz işlemleri tekrarlanacaktır. Bu durum istenmeyen bir performans kaybına neden olabilir. Örnek 2: void insert(int sayi[N]) { int i,j,buffer; for(i=1;i<N;i++) { buffer=sayi[i]; j=i; while(j>0 && sayi[j-1]<buffer) { sayi[j]=sayi[j-1]; j--; } sayi[j]=buffer; } } Ödev: Bir sayı dizisinde 10 adet sayı küçükten büyüğe sıralanmış olarak tutulmaktadır. Bu sayı dizisine dışarıdan 4 tane eleman girilecek fakat her eleman sıralama bozulmadan uygun konuma yerleştirilecektir. Bu işlemi yapan programı hazırlayınız.
  • 5. 1.3. Kabarcık Sıralaması Kabarcık sıralama (bubble sort) algoritmasında belirlenen kritere göre veri kümesinde bulunan art arda bulunan elemanlar sondan başa veya baştan sona doğru birbirleriyle karşılaştırılarak sonuca ulaşılır. Bu algoritma için seçim algoritmasında olduğu gibi iki döngü kullanılır. İlk döngüde işlenen elemanın küme içerisindeki konumu belirlenir. 2. Döngü ile küme içerisinde yer alan bütün elemanlara 1. döngüde yapılan işlemlerin tatbik edilmesi sağlanır. Bu döngüler iç içedir. Aşağıdaki örnekte sayilar kümesinin kabarcık sıralama algoritması kullanılarak büyükten küçüğe sıralama işlemleri ve bellek değerleri gösterilmiştir. Kabarcık algoritması ilk elemandan başlatılmıştır; fakat sondan da başlatılabilir. Örnek: sayilar={10, 22, 9, 35, 14} Adım 1 sayilar [0] 10 [1] 22 [2] 9 [3] 35 [4] 14 Dizinin 0. konumunda bulunan değer ile komşusu karşılaştırılır ve şart sağlanırsa yer değiştirilir. Sonra 1. İle komşusu karşılaştırılır ve şart sağlanırsa yer değiştirilir. Küme sonuna kadar işlem sürdürülür. Böylece dizinin en küçük elemanı yerleştirilir. Adım 2 sayilar [0] 22 [1] 10 [2] 35 [3] 14 [4] 9 Dizinin 1. konumunda bulunan değer sırayla kendinden sonraki elemanlar ile karşılaştırılır ve küçük olduğu eleman ile yer değiştirir. Böylece dizinin en büyük 2. elemanı 1. konuma yerleştirilir. Adım 3 sayilar [0] 22 [1] 35 [2] 14 [3] 10 [4] 9 Dizinin 2. konumunda bulunan değer sırayla kendinden sonraki elemanlar ile karşılaştırılır ve küçük olduğu eleman ile yer değiştirir. Böylece dizinin en büyük 3. elemanı 2. konuma yerleştirilir. Adım 4 sayilar [0] 35 [1] 22 [2] 14 [3] 10 [4] 9 Dizinin 3. konumunda bulunan değer sırayla kendinden sonraki elemanlar ile karşılaştırılır ve küçük olduğu eleman ile yer değiştirir. Böylece dizinin en büyük 4. elemanı 3. konuma yerleştirilir. İşlem sonu sayilar [0] 35 [1] 22 [2] 14 [3] 10 [4] 9 Örnek 2: void bubble(int sayi[N]) { int i,j,buffer; for(i=0;i<N-1;i++){ for(j=0;j<N-1-i;j++){ if(sayi[j]<sayi[j+1]) { buffer=sayi[j]; sayi[j]=sayi[j+1]; sayi[j+1]=buffer; } } } }
  • 6. Ödev: Klavyeden girilen 100 tane sayıyı, kabarcık sıralama algoritmasını sondan başa doğru uygulayarak, küçükten büyüğe sıralayıp ekranda gösteren programı hazırlayınız. 1.4. Alfabetik Sıralama Sıralama yapılırken verinin içeriği yani sayı veya katar olması, karşılaştırma işlemini temelde etkilemez. Yukarıda sayılara uygulanan sıralama algoritmaları, alfabetik sıralama için de kullanılabilir. Fakat karşılaştırma yapılırken kullanılacak operatörün katar verilerine uygun olması gerekir. Bu işlem için strcmp() fonksiyonu kullanılır. strcmp(), arşılaştırılan iki veri aynıysa 0, farklı ise üzerinde bulundurduğu karakterlerin alfabetik sıradaki konumlarına göre pozitif veya negatif bir değer döndürür. Ödev: Klavyeden girilen 10 adet isim değerleri bir kümede tutulmaktadır. Bu isimleri alfabetik artan (A’dan Z’ye doğru) sıralama yaparak ekranda gösteren programı seçim algoritması kullanarak gerçekleştiriniz. 1.5. Hızlı (Quick, Pivot) Sıralama Hızlı sıralama algoritması böl ve yönet politikasına dayanır; sıralanması istenen dizi belirli bir karşılaştırma (pivot) değerine göre iki alt diziye ayrılır. İkiye ayırma işlemi, bu karşılaştırma değerinden küçük olan elemanlar bir tarafta, büyük olan elemanlar diğer tarafta yerleştirilerek yapılır. Bu işlem geriye kalan her bölme üzerinde tekrarlanır. Karşılaştırma değeri ya rastgele seçilir ya da dizideki az sayıda elemanın değerinin ortalaması alınır. Hızlı sıralama algoritması en etkin (en hızlı çalışan) algoritma olmasına rağmen az sayıda elemana sahip dizilerde veya zaten neredeyse sıralı olan dizilerde tekrarlanan çağrılardan dolayı tercih edilmeyebilir. Hızlı arama algoritmasında recursive (özyinelemeli) yapı kullanılır. Hızlı sıralama algoritmasını kullanarak dizi elemanlarını artan şekilde sıralamak için gerekli işlem basamakları: 1. İlk olarak sıralanacak diziyi ikiye bölmek için bir pivot (karşılaştırma değeri) seçilir. Pivot genellikle verilen dizinin ilk elemanı ya da son elemanı olabilir. Dizide pivottan büyük elemanlar pivotun sağına (üst), pivottan küçük elemanlar ise pivotun soluna (alt) konur. Pivot ise oluşan bu iki kümenin ortasına (orta) yerleşir. Böylece verilen dizi birbirinden bağımsız olarak iki alt diziye ayrılmış olur. 2. Hızlı sıralama algoritması bağımsız bu iki alt dizi (üst ve alt) içerisinde de recursive olarak çağrılır ve bu diziler kendi içerisinde 1.adım tekrarlanarak ikiye ayrılırlar. Bu işlemler diziler parçalanmayacak duruma gelene kadar tekrarlanır. Alt Orta Üst
  • 7. A Dizisi Örneğin; Sıralanacak dizi; Başlangıç Durumu; 1.Adım 2.Adım 3.Adım 4.Adım 5.Adım 1. Sıralanacak dizinin son sayısı (13) pivot elemanı (karşılaştırma) olarak seçilir. Bu eleman daha sonraki arama ve yer değiştirme işlemlerine tabi olmaz. 2. Sol başta pivot elemanı 13’ten büyük olan ilk sayı bulunur ve sağ baştan 13’den küçük ilk sayı bulunur. Daha sonra bu iki sayı yer değiştirilir. 3. Soldan pivot elemanından (13) büyük ve sağdan pivot elemanından küçük sayılar ortada buluşana kadar 2.adım tekrarlanır. 4. 3.adımda soldan 13’ ten büyük ve sağdan 13’ten küçük sayılar ortada buluştuğu için (5 ve 83) 13 ile 83 yer değiştirir. Pivotun solundaki alt dizi ve sağındaki üst dizi kendi içinde aynı teknikle sıralanır. void quick(int sayi[], int start, int end, int pivot) { int location,bound; if (start < end) { pivot = sayi[end]; location = start; bound = end; while (location < bound) { if (sayi[location] > pivot) Pivot elemanından küçük elemanlar Pivot elemanı Pivot elemanından büyük elemanlar 14 5 83 23 4 87 13 14 5 83 23 4 87 13 4 5 83 23 14 87 13 4 5 83 23 14 87 13 4 5 13 23 14 87 83 Alt dizi sıralanır. 13 Üst dizi sıralanır. 4 5 13 14 23 83 87 Pivot Soldan 13’den büyük ve sağdan 13’den küçük sayılar ortada buluştuğu veya çakıştığı için pivotun yeri bulunmuş olur ve araya yerleştirilir.
  • 8. { ++location; } else { sayi[bound] = sayi[location]; sayi[location] = sayi[bound - 1]; --bound; } } sayi[bound] = pivot; quick(sayi, start, bound - 1, pivot); quick(sayi, bound + 1, end, pivot); } }