#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