Bildiğiniz üzere ligtv yayınları yüzünden 18 milyon Blogger sitesi engellendi. Doğal olarak bolubeyi.Net de bundan nasibini aldı ve uzun bir süre yazı ekleyemedim. Aslında ekleyebilirdim, ama içimden de pek gelmedi desem yalan olmaz. Siteyi incelerseniz, tasarımı kaydı biraz. Bazı yazılarımda resimler de görünmüyor. Neyse ki dns ayarlarını değiştirdim ve şimdi yine paylaşımlara devam ediyorum. Bugün sizlerle “Algoritmalar” adlı derste verilmiş olan “Merge sort” ödevimi paylaşacağım. Hatırlarsanız daha önce; bubble sort, insertion sort ve selection sort adlı sıralama programlarını c# üzerinden paylaşmıştım.
Şimdi paylaşacağım programda, merge sort programının c# kodlarıyla birlikte başka işlemler de yapacağız. Öncelikle 0-10000 arası rastgele sayılar üreteceğiz. Program bize, üretilen 10 adet sayıyı yazacak ve daha sonrasında bunların sıralanmış halini yazacak. Ayrıca 100 adet ve 1000 adet ayrı ayrı sayılar da üretecek. Bunların da işlem sayılarını ekrana yazacak sadece. Programa baktığınızda; 10-100-1000 adet sayılar tanımladık dizi şeklinde. Yapılan işlem sayılarını da, tanımladığımız “sayac” değişkeniyle kontrol ettirdik. Yaptığımız her işlemde sayacımızı 1 artırarak programımızın en sonunda ekrana yazdırdık. Merge sort nasıl çalışıyor, hangi mantığa göre sayıları sıralıyor diye sorarsanız onu da açıklayayım: Sayıların sıralanmamış hallerini belli bir seviyeye kadar parçalar ve gruplara ayırır. Bunları kendi aralarında karşılaştırarak sıralanmış veri gruplarına dönüştürür. Aslında eklediğim resim her şeyi anlatıyor. Gördüğünüz resimde 8 adet sayı girilmiş. bu sayılar önce 4’erli, sonra 2’şerli gruplara ayrılmış. Bu ikişerli gruplar önce kendi aralarında sıralanıyor, daha sonra 4’erli grup haline dönüşerek, onlar da kendi aralarında sıralanıyor. Son olarak da karışık olarak girilmiş sayılar, karşımıza küçükten büyüğe doğru sıralanmış olarak çıkıyor. Buyrun Merge Sort c# kodları:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Bolubeyi.Net
{
class Program
{
static int sayac = 0;
static int[] sayi1 = new int[10];
static int[] sayi2 = new int[100];
static int[] sayi3 = new int[1000];
static void Main(string[] args)
{
rastgele();
merge_bol(0, sayi1.Length – 1, sayi1);
Console.WriteLine(“–Sıralanmış Hali–n”);
for (int i = 0; i < sayi1.Length; i++) {
Console.WriteLine(“{0}”, sayi1[i]);
}
Console.WriteLine(“0-10 arası Sıralama sayacı:{0}”, sayac);
sayac = 0;
merge_bol(0, sayi2.Length – 1, sayi2);
Console.WriteLine(“0-100 arası Sıralama sayacı:{0}”, sayac);
sayac = 0;
merge_bol(0, sayi3.Length – 1, sayi3);
Console.WriteLine(“0-1000 arası Sıralama sayacı:{0}”, sayac);
sayac = 0;
}
static void rastgele()
{
Random rasgele = new Random();
for (int i = 0; i < sayi1.Length; i++)
{
sayi1[i] = rasgele.Next(0, 10001);
Console.WriteLine(“Secilen {0}. sayi1 = {1}”, (i + 1), sayi1[i]);
}
for (int i = 0; i < sayi2.Length; i++)
{
sayi2[i] = rasgele.Next(0, 10001);
}
for (int i = 0; i < sayi3.Length; i++)
{
sayi3[i] = rasgele.Next(0, 10001);
}
}
public static void merge_bol(int p, int r, int[] dizi)
{
if (p < r)
{
int q = (p + r) / 2;
sayac += 1;
merge_bol(p, q,dizi);
sayac += 1;
merge_bol(q + 1, r,dizi);
sayac += 1;
merge(p, q + 1, r, dizi);
sayac += 1;
}
}
public static void merge(int p, int q, int r,int[] a)
{
int sb, index, yer;
sayac += 1;
int[] b = new int[a.Length];
sayac += 1;
sb = q – 1;
sayac += 1;
yer = p;
sayac += 1;
index = r – p + 1;
sayac += 1;
while ((p {
sayac += 1;
if (a[p] {
sayac += 1;
b[yer] = a[p];
sayac += 1;
yer = yer + 1;
sayac += 1;
p = p + 1;
sayac += 1;
}
else
{
b[yer] = a[q];
sayac += 1;
yer = yer + 1;
sayac += 1;
q = q + 1;
sayac += 1;
}
}
while (p {
sayac += 1;
b[yer] = a[p];
sayac += 1;
p = p + 1;
sayac += 1;
yer = yer + 1;
sayac += 1;
}
while (q {
b[yer] = a[q];
sayac += 1;
q = q + 1;
sayac += 1;
yer = yer + 1;
sayac += 1;
}
for (int i = 0; i < index; i++)
{
a[r] = b[r];
sayac += 1;
r = r – 1;
}
}
}
}
Bu ödevi yaparken şu anda okuduğum okul olan Gazi Üniversitesi mezunu Mehmet Duran’ın sitesinden yardım aldım. Dilerseniz buradan inceleyebilirsiniz. Ayrıca daha önceden de paylaşmış olduğum sıralama programlarına buradan ulaşabilirsiniz:
İnsertion sort
Bubble ve Selection sort
Yaşasın! bolubey,.net i tekrar takip edebileceğim 🙂
Heyecanlanma, sakin ol şampiyon:D
ben sizi sürekli takip ediyorum ve süpersiniz …………..
Teşekkür ediyorum:) 1 Hazirandan itibaren tekrar başlayacağım yazılara:)