Sıralama Algoritmaları Merge Sort

1
1543
Sıralama Algoritmaları Merge Sort

Merhaba arkadaşlar. Yazılarımıza sıralama algoritmaları ile devam ediyoruz. Bu yazımda başlıktan da anlaşılacağı gibi Merge Sort (Birleştirmeli Sıralama) dan bahsedeceğim. Aslında kullanım amacı isminden anlaşılıyor. Çalışma mantığını bir örnekle incelersek;

Sıralama Algoritmaları

38-27-43-3-9-82-10 şeklinde sırasız bir dizimiz olsun ve bunu Merge Sort algoritmasıyla sıralayalım. Dizi kendisini sürekli ikiye bölerek ortaya çıkan en küçük parçaları kendi aralarında sıralayacak.

Adım 1: 38-27-43-3-9-82-10 dizimiz bu şekilde.

Adım 2: Dizi kendisini 38-27-43-3 ve 9-82-10 olarak iki alt diziye ayırır.

Adım 3: Bu iki alt dizi de kendisini ikiye bölerek; 38-27;43-3 ve 9-82;10  şeklinde alt dizileri oluştururlar.

Adım 4: Bu alt diziler kendisi içinde sıralanır ve alt dizilerimiz; 27-38;3-43 ve 9-82;10 şekline gelirler.

Adım 5: Alt dizilerimiz sıralandıktan sonra tekrar birleştirilerek; 3-27-38-43 ve 9-10-82 dizilerini oluştururlar

Adım 6: Her iki diziden elemanlar sırasıyla seçilerek tek bir dizide birleştirildi ve dizi  3-9-10-27-38-43-82 şeklinde sıralanmış oldu.

Bu şekilde bayağı bir karışık olduğu çok belli :) Hemen görselle destekleyelim.

Merge_sort_animation

Merge-Sort-Animasyon

ve C# kodları;

static public void MainMerge(int[] numbers, int left, int mid, int right)

{

int[] temp = new int[25];

int i, eol, num, pos;

eol = (mid - 1);

pos = left;

num = (right - left + 1);

while ((left <= eol) && (mid <= right))

{

if (numbers[left] <= numbers[mid])

temp[pos++] = numbers[left++];

else

temp[pos++] = numbers[mid++];

}

while (left <= eol)

temp[pos++] = numbers[left++];

while (mid <= right)

temp[pos++] = numbers[mid++];

for (i = 0; i < num; i++)

{

numbers[right] = temp[right];

right--;

}

}

static public void SortMerge(int[] numbers, int left, int right)

{

int mid;

if (right > left)

{

mid = (right + left) / 2;

SortMerge(numbers, left, mid);

SortMerge(numbers, (mid + 1), right);

MainMerge(numbers, left, (mid + 1), right);

}

}

static void Main(string[] args)

{

Console.Write("Dizinin eleman sayısını giriniz:");

int max = Convert.ToInt32(Console.ReadLine());

int[] numbers = new int[max];

for (int i = 0; i < max; i++)

{

Console.Write("Dizinin [" + (i + 1).ToString() + "]. Elemanını giriniz : ");

numbers[i] = Convert.ToInt32(Console.ReadLine());

}

Console.Write("Dizinin elemanları: ");

Console.Write("\n");

for (int k = 0; k < max; k++)

{

Console.Write(numbers[k] + " ");

Console.Write("\n");

}

Console.WriteLine("MergeSort algoritması ile sıralandıktan sonra dizinin hali ");

SortMerge(numbers, 0, max - 1);

for (int i = 0; i < max; i++)

Console.WriteLine(numbers[i]);

Console.ReadLine();

}

Bu yazımız da buraya kadar arkadaşlar. Bundan sonra istek konu bildirebilirsiniz. İletişim adreslerim profilimde mevcut veya yazılarıma yorum atarak da isteklerinizi bildirebilirsiniz. Hepinize kolay gelsin. Umarım yardımcı olabilmişimdir. Bir sonraki yazımızda görüşmek üzere hoşçakalın!

Paylaşır mısınız?
Önceki İçerikMatematikte Temel Ispat Yöntemleri
Sonraki İçerikDünyanın En Büyük Barajı – Üç Geçit Barajı
Merhabalar.Ben Anıl.19 yaşındayım.Kastamonuluyum.Yıldız Teknik Üniversitesi Bilgisayar Programcılığı 2.sınıf öğrencisiyim.Her konuda yazabilirim.Fakat ağırlıklı olarak algoritma,programlama ve elektronik üzerine yazacağımı düşünüyorum.Saygılarımla...

1 Yorum

  1. Merhabalar Anıl bey. Sizden bir ricam olacaktı. Eminim sizin için çok basit olacaktır. 7 tane olan sıralama algoritmasının akış diyagramları hakkında yardımcı olabilir misiniz? Insertion Sort, Selection Sort, Bubble Sort, Radix Sort, Merge Sort, Quick sort ve Heap Sort. Çok önemli ve acil olarak lazım lütfen yardımcı olun.

Düşünceleriniz Nedir?