SIRALAMA SORTING. Yrd. Doç. Dr. Aybars UĞUR

Benzer belgeler
SIRALAMA SORTING. Doç. Dr. Aybars UĞUR

SIRALAMA ALGORİTMALARI

SIRALAMA ALGORİTMALARI

Yrd. Doç. Dr. Ümit ATİLA

KUYRUKLAR QUEUES. Doç. Dr. Aybars UĞUR

BLM-112 PROGRAMLAMA DİLLERİ II. Ders-7 Sıralama Algoritmaları

YZM 2116 Veri Yapıları

Alıştırma 1: Yineleme

ELN1002 BİLGİSAYAR PROGRAMLAMA 2

YMT219 VERİ YAPILARI ÖDEV-1

JAVADA DİZİ İŞLEMLERİ

BAĞLAÇLI LİSTELER LINKED LISTS

BAĞLAÇLI LİSTELER LINKED LISTS

KUYRUKLAR. Doç. Dr. Aybars UĞUR

1. Her marka için 3 aylık satış toplamı nedir? (Tablodaki satır toplamları)

Insertion Sort. (Sokuşturma Sıralaması)

BMÜ-111 Algoritma ve Programlama. Bölüm 5. Tek Boyutlu Diziler

I Java Veri Yapıları 1

YZM 2116 Veri Yapıları

F(A, N, K) // A dizi; N, K integer if N<0 then return K; if A[N]>K then K = A[N]; return F(A, N-1, K);

Dizi türündeki referanslar, dizi nesnelerine bağlanmaktadır. Dizi referansları tanımlamak bu dizinin hemen kullanılacağı anlamına gelmez...

2 ALGORİTMA VE AKIŞ DİYAGRAMLARI

Sınav Dağılım & IMKB Endeks

YZM 2116 Veri Yapıları

HACETTEPE ÜNİVERSİTESİ BAHAR DÖNEMİ

BMÜ-111 ALGORİTMA VE PROGRAMLAMA AKIŞ KONTROLÜ YRD. DOÇ. DR. İLHAN AYDIN

D İ Z İ L E R A R R A Y S

İST 264 VERİ YAPILARI Bitirme Sınavı A Grubu

Arasınav Örnek Soruları Bahar 2018

Algoritmalar. Sıralama Problemi ve Analizi. Bahar 2017 Doç. Dr. Suat Özdemir 1

DÖNGÜLER BMÜ-111 ALGORİTMA VE PROGRAMLAMA-I YRD. DOÇ. DR. İLHAN AYDIN

1. Aşağıdaki program parçacığını çalıştırdığınızda result ve param değişkenlerinin aldığı en son değerleri ve programın çıktısını yazınız.

VERİ YAPILARI DATA STRUCTURE GİRİŞ

Java ile Nesneye Yönelik Programlama (Object Oriented Programming)

VERİ YAPILARI DERS NOTLARI BÖLÜM 5 QUEUE (KUYRUK) Yard. Doç. Dr. Deniz KILINÇ

Arasınav Soruları Bahar 2018

Veri Yapıları. for(i=1;i<n;i++) { ekle=d[i]; for (k=i 1; k>=0 && ekle<=d[k] ;k ) D[k+1]=D[k]; /* Geriye kaydırılıyor*/

Interface Comparator. Kılgılayan sınıf: Collator. Bildirimi: public interface Comparator

Merge Sort Bireşen Sıralama

while(), do-while(), for() M.İLKUÇAR 2010 MAKU-MYO

Class PriorityQueue. Class PriorityQueue<E> java.lang.object java.util.abstractcollection<e> java.util.abstractqueue<e> java.util.

MAT213 Bilgisayar Programlama I

Algoritmalar. Doğrusal Zamanda Sıralama. Bahar 2017 Doç. Dr. Suat Özdemir 1

VERİ YAPILARI DERS NOTLARI BÖLÜM 1 GİRİŞ. Yard. Doç. Dr. Deniz KILINÇ

Programın Akışının Denetimi. Bir arada yürütülmesi istenen deyimleri içeren bir yapıdır. Söz dizimi şöyledir:

Yrd. Doç. Dr. A. Burak İNNER Bilgisayar Mühendisliği

GÜZ DÖNEMİ AKT105 BİLGİSAYAR PROGRAMLAMA DERSİ 4. UYGULAMA

Ders - 7 while döngüsü

ESKİŞEHİR OSMANGAZİ ÜNİVERSİTESİ

Bölüm 6. Karma. Olcay Taner Yıldız. O. T. Yıldız, C && Java ile Veri Yapılarına Giriş, Boğaziçi Üniversitesi Yayınevi, / 31

BMÜ-101 ALGORİTMA VE PROGRAMLAMAYA GİRİŞ LABORATUARI

/*Aşağıda ki kodları doğru şekilde anlar ve kullanırsanız java da sınıfları biraz da olsa anlamış olursunuz.*/

Örnek 1: Programı yazın ve çalıştırın.

İNÖNÜ ÜNİVERSİTESİ MÜHENDİSLİK FAKÜLTESİ BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜMÜ 2. SINIF 1. DÖNEM VERİ YAPILARI DERSİ LABORATUAR ÖDEVİ

Java, Python ve Ruby Dillerinin Performans Karşılaştırması

İNÖNÜ ÜNİVERSİTESİ MÜH. FAK. BİLGİSAYAR MÜH. BÖL. ALGORİTMA VE PROGRAMLAMA 1 DERSİ LAB. ÖDEVİ

VERİ YAPILARI LİSTELER. Yrd. Doç. Dr. Murat GÖK Bilgisayar Mühendisliği Bölümü YALOVA ÜNİVERSİTESİ

Đlgili konular: Collection, Set, HashSet, Comparable, Comparator, TreeMap, Collections.synchronizedSortedSet(SortedSet), Serialized Form

Binary Search. (Yarılama) Bölüm Dizide Bir Öğe Arama

Merge (Bireşim) Algoritmayı önce bir örnek üzerinde açıklayalım.

Soru 1: Fahrenheit cinsinden verilen sıcaklığı Kelvin'e çeviren bir program yazınız. Aşağıdaki dönüşüm formülünü kullanabilirsiniz:

Quick Sort Algoritması (Hızlı Sıralama Algoritması)

YZM ALGORİTMA ANALİZİ VE TASARIM DERS#1: ALGORİTMA KAVRAMI

Bölüm 8. Ayrık Küme. Olcay Taner Yıldız. O. T. Yıldız, C && Java ile Veri Yapılarına Giriş, Boğaziçi Üniversitesi Yayınevi, / 16

GÜZ DÖNEMİ AKT105 BİLGİSAYAR PROGRAMLAMA DERSİ 9. UYGULAMA

Çoktan Seçmeli Değerlendirme Soruları Akış Şemaları İle Algoritma Geliştirme Örnekleri Giriş 39 1.Gündelik Hayattan Algoritma Örnekleri 39 2.Say

İNÖNÜ ÜNİVERSİTESİ MÜH. FAK. BİLGİSAYAR MÜH. BÖL. ALGORİTMA VE PROGRAMLAMA 1 DERSİ LAB. ÖDEVİ

Veri Yapıları ve Algoritmalar dönem

BIL1202 ALGORİTMA VE PROGRAMLAMAYA GİRİŞ

DÖNGÜLER (LOOPS) while(), do-while(), for(), foreach()

Kodlanacak programlama dilinin kaynaklarından faydalanılarak kod yazımı yapılır.

Dizi ( Array ) ve Dizgi ( String )

Final Sınavı Örnek Soruları Bahar 2018

BLM111 Programlama Dilleri I. Hafta 10 Diziler. Yrd. Doç. Dr. Caner ÖZCAN

ALGORİTMA VE PROGRAMLAMA I

Algoritmaların Karşılaştırılması. Doç. Dr. Aybars UĞUR

Nesne Yönelimli Programlama

JAVA PROGRAMLAMA DİLİ ÖZELLİKLERİ

Kodlanacak programlama dilinin kaynaklarından faydalanılarak kod yazımı yapılır.

BLM-111 PROGRAMLAMA DİLLERİ I. Ders-10 Diziler. Yrd. Doç. Dr. Ümit ATİLA

Özyineleme (Recursion)

Yığıtın en üstündeki öğeyi değer olarak alır; ama onu yığıttan almaz, yerinde bırakır.

C PROGRAMLAMA D İ L İ

BMÜ-112 ALGORİTMA VE PROGRAMLAMA-II LABORATUARI DENEY-2 FÖYÜ

Algoritmalar. Arama Problemi ve Analizi. Bahar 2016 Doç. Dr. Suat Özdemir 1

AĞAÇLAR. Doç. Dr. Aybars UĞUR

İNÖNÜ ÜNİVERSİTESİ MÜHENDİSLİK FAKÜLTESİ BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜMÜ 2. SINIF 1. DÖNEM VERİ YAPILARI DERSİ LABORATUAR ÖDEVİ

İNÖNÜ ÜNİVERSİTESİ MÜH. FAK. BİLGİSAYAR MÜH. BÖL. ALGORİTMA VE PROGRAMLAMA 2 DERSİ LAB. ÖDEVİ

Javada Diziler. Javada diziler

YZM 2116 Veri Yapıları

Bilgisayar programlamanın üç temel mantık yapısından biridir. Diğer ikisi ise Seçilim(Selection) ve Döngü(Loop, Iteration)dür.

Kılgılayan Sınıflar: AbstractMap, Attributes, HashMap, Hashtable, IdentityHashMap, RenderingHints, TreeMap, WeakHashMap

BİL-341 ALGORİTMALAR BÜYÜK O NOTASYONU AHMET ATAKAN atakanahmet@hotmail.com KIRGIZİSTAN-TÜRKİYE MANAS ÜNİVERSİTESİ MÜHENDİSLİK FAKÜLTESİ

Yigin & Kuyruk {\} /\ Suhap SAHIN Onur GÖK

AĞAÇLAR TREES. Doç. Dr. Aybars UĞUR

Java Programlama Dilinde Veri Tipleri. Yrd. Doç. Dr. Aybars UĞUR

Diziler & Karakter Katarı (String)

Aktivite 7. En hafif ve en ağır Sıralama Algoritmaları

Java da Program Denetimi ve Operatörler. Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 2 1

Transkript:

SIRALAMA SORTING Yrd. Doç. Dr. Aybars UĞUR

Giriş Sıralama ve arama tekniklerinden pek çok programda yararlanılmaktadır. Günlük yaşamımızda elemanların sıralı tutulduğu listeler yaygın olarak kullanılmaktadır. Telefon rehberindeki bir kişinin telefon numarasının bulunması bir arama (search) işlemidir. Telefon rehberlerindeki kayıtlar kişilerin soyadlarına göre sıralıdır. Bir telefon numarasının kime ait olduğunu bulmaya çalışmak da bir başka arama işlemidir. Eğer telefon rehberi kişilerin soyadlarına göre alfabetik olarak değil de telefon numaralarına göre kronolojik olarak sıralı olursa bu, arama işlemini basitleştirir. Kütüphanelerdeki kitapların özel yöntemlere göre sıralanarak raflara dizilmesi, bilgisayarın belleğindeki sayıların sıralanması da yapılacak arama işlemlerini hızlandırır ve kolaylaştırır. Genel olarak eleman toplulukları, bilgisayarda da, telefon rehberi gibi örneklerde de daha etkin erişmek (aramak ve bilgi getirmek) üzere sıralanır ve sıralı tutulurlar. VERİ YAPILARI : 11 SIRALAMA (SORTING) 2

Anahtar; İçsel ve Dışsal Sıralama Eleman (kayıt, yapı...) toplulukları genelde (her zaman değil) bir anahtara göre sıralı tutulurlar. Bu anahtar genelde elemanların bir alt alanı yani üyesidir (Elemanlar soyada göre sıralı olursa soyadı anahtardır, numaraya göre sıralı olursa numara anahtardır, nota göre olursa not alanı anahtardır). Elemanlar topluluğu içindeki her elemanın anahtar değeri kendinden önce gelen elemanın anahtar değerinden büyükse artan sırada, küçükse azalan sırada sıralıdır denilir (ilgili anahtara göre). Sıralama, sıralanacak elemanlar bellekte ise internal (içsel), kayıtların bazıları ikincil bellek ortamındaysa external (dışsal) sıralama olarak adlandırılır. VERİ YAPILARI : 11 SIRALAMA (SORTING) 3

Sıralama ve Arama Sıralama ve arama arasında bir ilişki olduğundan bir uygulamada ilk soru sıralama gerekli midir? olmalıdır. Arama işlemleri yoğun ise, sıralamanın veya o şekilde tutmanın getireceği yük, sıralı olmayan kayıtlar üzerindeki arama işlemlerinin getireceği toplam yük yanında çok hafif kalacaktır. Bu karar verilirse, arkasından sıralamanın nasıl yapılacağı ve hangi sıralama yöntemlerinin kullanılacağı kararlaştırılmalıdır. Bunun nedeni, tüm diğer yöntemlerden üstün evrensel bir sıralama tekniğinin olmamasındandır. VERİ YAPILARI : 11 SIRALAMA (SORTING) 4

SIRALAMA TEKNİKLERİNİN ETKİNLİKLERİ ve ANALİZİ

1) Bubble Sort (Kabarcık Sıralama) (Exchange Sorts kapsamında) void bubble(int x[], int n) int hold, j, pass; int switched = TRUE; for (pass=0; pass<n-1 && switched == TRUE; pass++) switched = FALSE; for(j=0; j<n-pass-1; j++) if (x[j] > x[j+1]) switched = TRUE; hold = x[j]; x[j] = x[j+1]; x[j+1] = hold; ; ; ; Bubble sort, sıralama teknikleri içinde anlaşılması ve programlanması kolay olmasına rağmen etkinliği en az olan algoritmalardandır (n elemanlı x dizisi için) : VERİ YAPILARI : 11 SIRALAMA (SORTING) 6

Bubble Sort un Zaman Karmaşıklığının Hesaplanması En fazla (n-1) iterasyon gerektirir. Veriler : 25 57 48 37 12 92 86 33 Tekrar 1 : 25 48 37 12 57 86 33 92 Tekrar 2 : 25 37 12 48 57 33 86 92 Tekrar 3 : 25 12 37 48 33 57 86 92 Tekrar 4 : 12 25 37 33 48 57 86 92 Tekrar 5 : 12 25 33 37 48 57 86 92 Tekrar 6 : 12 25 33 37 48 57 86 92 Tekrar 7 : Önceki turda değişen eleman olmadığından yapılmaz. Analizi kolaydır (İyileştirme yapılmamış algoritmada) : (n-1) iterasyon ve her iterasyonda (n-1) karşılaştırma. Toplam karşılaştırma sayısı : (n-1)*(n-1) = n 2-2n + 1 = O(n 2 ) (Yukarıdaki gibi iyileştirme yapılmış algoritmada etkinlik) : iterasyon i'de, (n-i) karşılaştırma yapılacaktır. Toplam karşılaştırma sayısı = (n-1)+(n-2)+(n-3)+...+(n-k) = kn - k*(k+1)/2 = (2kn - k 2 - k)/2 ortalama iterasyon sayısı, k, O(n) olduğundan = O(n 2 ) VERİ YAPILARI : 11 SIRALAMA (SORTING) 7

2) Quick Sort (Hızlı Sıralama) (Exchange Sorts kapsamında) #include <stdio.h> void qsort2(double *left, double *right) double *p = left, *q = right, w, x=*(left+(right-left>>1)); do while(*p<x) p++; while(*q>x) q--; if(p>q) break; w = *p; *p = *q; *q = w; while(++p <= --q); if(left<q) qsort2(left,q); if(p<right) qsort2(p,right); void main() double dizi[8] = 23, 398, 34, 100, 57, 67, 55, 320 ; qsort2( &dizi[0], &dizi[7] ); VERİ YAPILARI : 11 SIRALAMA (SORTING) 8

Quick Sort un Zaman Karmaşıklığının Hesaplanması n elemanlı bir dizi sıralanmak istendiğinde dizinin herhangi bir yerinden x elemanı seçilir (örnek olarak ortasındaki eleman). X elemanı j. yere yerleştiğinde 0. İle (j-1). yerler arasındaki elemanlar x'den küçük, j+1'den (n- 1)'e kadar olan elemanlar x'den büyük olacaktır. Bu koşullar gerçekleştirildiğinde x, dizide en küçük j. elemandır. Aynı işlemler, x[0]-x[j-1] ve x[j+1]-x[n-1] alt dizileri (parçaları) için tekrarlanır. Sonuçta veri grubu sıralanır. Eğer şanslı isek, seçilen her eleman ortanca değere yakınsa log 2 n iterasyon olacaktır = O(n log 2 n). Ortalama durumu işletim zamanı da hesaplandığında O(n log 2 n)'dir, yani genelde böyle sonuç verir. En kötü durumda ise parçalama dengesiz olacak ve n iterasyonla sonuçlanacağında O(n 2 ) olacaktır (en kötü durum işletim zamanı). VERİ YAPILARI : 11 SIRALAMA (SORTING) 9

3) Straight Selection Sort (Seçmeli Sıralama) (Selection Sorts kapsamında) Elemanların seçilerek uygun yerlerine konulması ile gerçekleştirilen bir sıralamadır : void selectsort(int x[], int n) int i, indx, j, large; for(i=n-1; i>0; i--) large = x[0]; indx = 0; for(j=1; j<=i; j++) if(x[j]>large) large = x[j]; indx = j; ; x[indx] = x[i]; x[i] = large; ; Veriler : 25 57 48 37 12 92 86 33 Tekrar 1 : 25 57 48 37 12 33 86 92 Tekrar 2 : 25 57 48 37 12 33 86 92 Tekrar 3 : 25 33 48 37 12 57 86 92 Tekrar 4 : 25 33 12 37 48 57 86 92 Tekrar 5 : 25 33 12 37 48 57 86 92 Tekrar 6 : 25 12 33 37 48 57 86 92 Tekrar 7 : 12 25 33 37 48 57 86 92 Selection Sort'un analizi doğrudandır. 1.turda (n-1), 2.turda (n-2), 3... (n-1). Turda 1, karşılaştırma yapılmaktadır. Toplam karşılaştırma sayısı = (n-1)+(n-2)+...+1 = n*(n-1)/2 = (1/2)n 2 -(1/2)n = O(n 2 ) VERİ YAPILARI : 11 SIRALAMA (SORTING) 10

4) Insertion Sort (Eklemeli Sıralama) (Insertion Sorts kapsamında) Elemanların sırasına uygun olarak listeye tek tek eklenmesi ile gerçekleştirilen sıralamadır : void insertsort(int x[], int n) int i,k,y; for(k=1; k<n; k++) y=x[k]; for(i=k-1; i>=0 && y<x[i]; i--) x[i+1]=x[i]; x[i+1]=y; ; Veriler Tekrar 1 Tekrar 2 Tekrar 3 Tekrar 4 Tekrar 5 Tekrar 6 Tekrar 7 12 25 33 37 48 57 86 92 25 25 25 25 12 12 12 57 57 48 37 25 25 25 48 48 57 48 37 37 37 37 37 37 57 48 48 48 12 12 12 12 57 57 57 92 92 92 92 92 92 86 86 86 86 86 86 86 92 33 33 33 33 33 33 33 VERİ YAPILARI : 11 SIRALAMA (SORTING) 11

Sıralama Algoritmalarının Karşılaştırılması Eğer veriler sıralı ise her turda 1 karşılaştırma yapılacaktır ve O(n) olacaktır. Veriler ters sıralı ise toplam karşılaştırma sayısı: (n-1)+(n-2)+...+3+2+1 = n*(n+1)/2 = O(n 2 ) olacaktır. Simple Insertion Sort'un ortalama karşılaştırma sayısı ise O(n 2 )'dir. Selection Sort ve Simple Insertion Sort, Bubble Sort'a göre daha etkindir. Selection Sort, Insertion Sort'tan daha az atama işlemi yaparken daha fazla karşılaştırma işlemi yapar. Bu nedenle Selection Sort büyük kayıtlardan oluşan az elemanlı veri grupları için (atamaların süresi çok fazla olmaz) ve karşılaştırmaların daha az yük getireceği basit anahtarlı durumlarda uygundur. Tam tersi için, insertion sort uygundur. Elemanlar bağlı listedelerse araya eleman eklemelerde veri kaydırma olmayacağından insertion sort mantığı uygundur. n'in büyük değerleri için quicksort insertion ve selection sort'tan daha etkindir. Quicksort'u kullanmaya başlama noktası yaklaşık 30 elemanlı durumlardır; daha az elemanın sıralanması gerektiğinde insertion sort kullanılabilir. VERİ YAPILARI : 11 SIRALAMA (SORTING) 12

5) Merge Sort (Birleştirmeli Sıralama) (Merge Sorts kapsamında) #include <stdio.h> #define numelts 8 void mergesort(int x[], int n) int aux[numelts], i,j,k,l1,l2,size,u1,u2; size = 1; while(size<n) l1 = 0; k = 0; while(l1+size<n) l2 = l1+size; u1 = l2-1; u2 = (l2+size-1<n)? l2+size-1 : n-1; for(i=l1,j=l2; i<=u1 && j<=u2; k++) if(x[i]<=x[j]) aux[k]=x[i++]; else aux[k]=x[j++]; for(;i<=u1;k++) aux[k] = x[i++]; for(;j<=u2;k++) aux[k] = x[j++]; l1 = u2+1; ; for(i=l1;k<n;i++) aux[k++] = x[i]; for(i=0;i<n;i++) x[i]=aux[i]; size*=2; VERİ YAPILARI : 11 SIRALAMA (SORTING) ; 13

Merge Sort un Zaman Karmaşıklığı Analiz : log 2 n tur ve her turda n veya daha az karşılaştırma. = O(n log 2 n) karşılaştırma. Quicksort ta en kötü durumda O(n 2 ) karşılaştırma gerektiği düşünülürse daha avantajlı. Fakat mergesort ta atama işlemleri fazla ve aux dizi için daha fazla yer gerekiyor. VERİ YAPILARI : 11 SIRALAMA (SORTING) 14

Java Koleksiyonları ile Dizi Sıralama import java.util.*; class Sorting public static void main(string args[]) // Dizilerin Sıralanması String dizi[] = "Telefon", "Buzdolabı", "Fırın", "Süpürge" ; Arrays.sort(dizi); for(string s : dizi) System.out.println(s); double sayilar[] = 2.3, 1.1, 3.5, -1 ; Arrays.sort(sayilar); for(double sayi : sayilar) System.out.println(sayi); Buzdolab² F²r²n S³p³rge Telefon -1.0 1.1 2.3 3.5 VERİ YAPILARI : 11 SIRALAMA (SORTING) 15

Java Koleksiyonları ile Liste Sıralama import java.util.*; class Sorting2 public static void main(string args[]) LinkedList<Integer> liste = new LinkedList<Integer>(); liste.add(5); liste.add(3); liste.add(7); Collections.sort(liste); for(integer i : liste) System.out.println(i); // Ekran Çıktısı 3 5 7 VERİ YAPILARI : 11 SIRALAMA (SORTING) 16

Collections kullanarak Heap Sort import java.util.*; public class HeapSort public static void main(string args[]) Vector<Integer> liste = new Vector<Integer>(); liste.add(3); liste.add(1); liste.add(5); liste.add(9); liste.add(7); Collection <Integer> listes = heapsort(liste); Iterator iterator; iterator = listes.iterator(); while (iterator.hasnext()) System.out.print(iterator.next()+" "); System.out.println(); public static <E> List<E> heapsort(collection<e> c) Queue<E> queue = new PriorityQueue<E>(c); List<E> result = new ArrayList<E>(); while (!queue.isempty()) result.add(queue.remove()); return result; 1 3 5 7 9 VERİ YAPILARI : 11 SIRALAMA (SORTING) 17