Metode merge sort merupakan metode sorting dengan cara divide and conquer yaitu dengan memecah kemudian menyelesaikan setiap bagian, kemudian menggabungkannya kembali. Pertama data dipecah menjadi 2 bagian dimana bagian pertama merupakan setengah (jika data genap) atau setengah minus satu (jika data ganjil) dari seluruh data, kemudian dilakukan pemecahan kembali untuk masing-masing blok sampai hanya terdiri dari satu data tiap blok.
Setelah itu digabungkan kembali dengan membandingkan pada blok yang sama apakah data pertama lebih besar daripada data ke-tengah+1, jika ya maka data ke-tengah+1 dipindah sebagai data pertama, kemudian data ke-pertama sampai ke-tengah digeser menjadi data ke-dua sampai ke-tengah+1, demikian seterusnya sampai menjadi satu blok utuh seperti awalnya. Sehingga metode merge sort merupakan metode yang membutuhkan fungsi rekursi untuk penyelesaiannya.
berikut sources code dalam bahasa C
fungsi main
#include"stdio.h"; #include"stdlib.h"; #define max 10000 void input(); void tukar(int *, int *); void tampil(); void partisi(int data[],int low,int high); void mergesort(int data[],int low,int mid,int high); int data[max],hasil[max]; int n; int main() { input(); awal=0; akhir=n-1; partisi(data,awal,akhir); tampil(); }
fungsi input
void input() { int i; printf("Masukkan jumlah total elemen: "); scanf("%d",&n); puts(" "); for(i=0;i<n;i++) { data[i]=rand(); printf("%d\t",data[i]); //printf("Elemen ke-%d: ",i+1); //scanf("%d",&data[i]); } }
fungsi mergesort
void partisi(int data[],int low,int high) { int mid; if(low<high) { mid=(low+high)/2; partisi(data,low,mid); partisi(data,mid+1,high); mergesort(data,low,mid,high); } } void mergesort(int data[],int low,int mid,int high) { int i,m,k,l,temp[max]; l=low; i=low; m=mid+1; while((l<=mid)&&(m<=high)) { if(data[l]<=data[m]) { temp[i]=data[l]; l++; } else { temp[i]=data[m]; m++; } i++; } if(l>mid) { for(k=m;k<=high;k++) { temp[i]=data[k]; i++; } } else { for(k=l;k<=mid;k++) { temp[i]=data[k]; i++; } } for(k=low;k<=high;k++) { data[k]=temp[k]; } }
fungsi tampil
void tampil() { int j; puts("\n"); for(j=0;j<n;j++) {printf("%d\t",data[j]);} puts("\n"); }
Video penjelasan Merge Sorting
Posting Komentar