#include <stdio.h>
#include<stdlib.h>
void merge(int dizi[], int left, int mid, int right)
{
int i, j, k; // Sayac degerleri
int n1 = mid-left+1; // sol dizi boyutu
int n2 = right-mid; // sag dizi boyutu
int solDizi[n1], sagDizi[n2]; // sol ve sag diziler
/* Aşagideki iki for dongusu alt dizileri olusturuyor */
for(i=0; i<n1; i++)
solDizi[i] = dizi[left+i];
for(j=0; j<n2; j++)
sagDizi[j] = dizi[mid+1+j];
/* Sayaclarimiz degistigi icin tekrardan sifirladim. Ama k degerine left degerini verdim... */
i=0;
j=0;
k=left;
while(i < n1 && j < n2) // soldaki ve sagdaki dizilerin boyutunu asmamasi icin kontrol yaptık
{
if(solDizi[i] <= sagDizi[j]) // sol dizinin ilk elemani sag diziden kucuk veya esitse
{
dizi[k] = solDizi[i]; // ustteki diziye soldaki dizinin elemanini atiyoruz
i++;
}
else
{
dizi[k] = sagDizi[j]; // degilse sagdaki dizinin elemanini atiyoruz
j++;
}
k++;
}
/* Atama islemleri sonucunda bir dizide eleman kalmissa onlari sira ile yerlestiriyoruz
iki dongu de ayni isi yapiyor, biri sol dizi icin digeri sag */
while(i < n1)
{
dizi[k] = solDizi[i];
i++;
k++;
}
while(j < n2)
{
dizi[k] = sagDizi[j];
j++;
k++;
}
}
void mergeSort(int dizi[], int left, int right) // dizi elemanlarini surekli ikiye bolen fonksiyon
{
if(left<right)
{
int mid = left + (right-left)/2; // Dizinin ortasindaki elemani buluyoruz.
mergeSort(dizi, left, mid); // Dizinin sol tarafini ikiye boluyoruz
mergeSort(dizi, mid+1, right); // dizinin sag tarafini ikiye boluyoruz.
merge(dizi, left, mid, right); //dizinin bolunmus parcalarini siralasin diye mergeSort fonksiyonuna pasliyoruz
}
}
void main()
{
int i;
int boyut;
printf("Kac Adet Sayi gireceksiniz? ...");
scanf("%d", &boyut);
int dizi[boyut-1];
for(i=0; i<boyut; i++)
{
printf("\nLutfen %d. sayiyi giriniz... ", i+1);
scanf("%d", &dizi[i]);
}
printf("\n Sayilarinizin Siralanmamis Hali Asagidaki Gibidir...\n");
for(i=0; i<boyut; i++)
{
printf("\n%d\n", dizi[i]);
}
mergeSort(dizi, 0, boyut-1);
printf("Sayilarinizin Siralandiktan Sonraki Hali Asagidaki Gibidir\n");
for(i=0; i<boyut; i++)
{
printf("\n%d\n", dizi[i]);
}
}
Etiketler: hazır algoritma kodları, hazır kodlar, hazır sıralama kodları, merge sort algoritması, merge sort c kodu, merge sort c kodu nasıl yazılır