Struktur Data dan Algoritma

Metode Pengurutan Merge Sort
Dr. Taufik Fuadi Abidin, M.Tech Irvanizam Zamanhuri, M.Sc

Proses penggabungan ini dilakukan sampai semua data tergabung dan terurut sesuai urutan yang diiginkan.S2) ← partisi(S. terminated condition dari proses rekursif mergesort akan berakhir jika data tidak dapat dibagi lagi (data tunggal telah diperoleh).n/2) mergesort(S1.C) Input: n elemen dari data S dan comparator C Output: data S terurut berdasarkan C if S. Pada contoh berikut ini.size > 1 (belum tunggal). proses penggabungan (merging) dilakukan antara sub-sub bagian dengan memperhatikan urutan data yang diinginkan (ascending/kecil ke besar atau descending/besar ke kecil).size()>1 (S1. Secara umum. Struktur Data dan Algoritma Author: Taufik Fuadi Abidin dan Irvanizam 2 . Kompleksitas proses penggabungan ini (merging) adalah O(n). Pemanggilan diri sendiri ini berakhir jika kondisi tertentu terpenuhi (terminated condition is true). proses pembagian data dilakukan terus selama S. Kompleksitas algoritma merge sort adalah O(n log n). Proses pembagian data dilakukan secara rekursif sampai data tidak dapat dibagi lagi atau dengan kata lain data dalam sub bagian menjadi tunggal. Metode ini juga menggunakan konsep devide and conquer yang membagi data S dalam dua kelompok yaitu S1 dan S2 yang tidak beririsan (disjoint). Fungsi rekursif adalah sebuah fungsi yang didalam implementasinya memanggil dirinya sendiri.C) mergesort(S2. sama dengan metode Quick Sort. Dengan kata lain.C) S ← merge(S1.S2) Fungsi merge berfungsi untuk menggabungkan hasil pengurutan dari sub bagian S1 dan S2 berdasarkan urutan tertentu (ascending atau descending order). Ilustrasi dari algoritma merge sort adalah sebagai berikut: Algoritma mergesort(S. Setelah data tidak dapat dibagi lagi. algoritma merge sort dapat diimplementasikan secara rekursif.Merge Sort Metode pengurutan merge sort adalah metode pengurutan lanjut.

elemen() S.first()) while not S1.elemen() < S2.empty() S.first().insert(S2.insert(S1.remove(S1.remove(S1.first()) return S Ilustrasi Algoritma Merge Sort Struktur Data dan Algoritma Author: Taufik Fuadi Abidin dan Irvanizam 3 .empty() if S1.remove(S2.S2) Input: data S1 dan S2 dengan n/2 elemen per data Output: data terurut dari penggabungan S1 ∪ S2 S ← data kosong while not S1.remove(S2.empty() and not S2.first()) while not S2.insert(S1.first().Algoritma dari proses penggabungan adalah: Algoritma merge(S1.insert(S2.empty() S.first()) else S.

Struktur Data dan Algoritma Author: Taufik Fuadi Abidin dan Irvanizam 4 .

Struktur Data dan Algoritma Author: Taufik Fuadi Abidin dan Irvanizam 5 .

Struktur Data dan Algoritma Author: Taufik Fuadi Abidin dan Irvanizam 6 .

w+j. for(i=0.int b[]. } Struktur Data dan Algoritma Author: Taufik Fuadi Abidin dan Irvanizam 7 .int c[]. key[8]={12. int n){ int j.int n).h> void mergesort(int key[].key[i]).11.k. ++j) key[j]=w[j]. } free(w).k<n.sizeof(int)).9.int m.m<n.17}.k*=2){ for(j=0. assert(w!=NULL). void merge(int a[]. } w = calloc(n. for (m=1. mergesort(key.h> #include <stdlib.23. int n). for (k=1.Latihan Urutkan data berikut menggunakan metode merge sort dan tunjukkan langkah per langkah proses pengurutannya. return 1.k.4.j+=2*k) merge(key+j.45. j<n.10. for(j=0.++i) printf("%d\t".m.j<n-k.key+j+k. if (m!=n){ printf("jumlah arraynya salah ").k). exit(1). 40 75 12 68 72 9 56 18 60 5 20 65 2 Implementasi Merge Sort dikutip dari buku ”A Book in C” #include <stdio. } void mergesort(int key[].m*=2).*w. int main(void){ int i.i<8.8).

int n){ int i=0.int b[].k=0. while (i<m) c[k++] =a[i++].j=0. while (i < m && j < n) if (a[i] < b[j]) c[k++] =a[i++]. } Struktur Data dan Algoritma Author: Taufik Fuadi Abidin dan Irvanizam 8 .void merge(int a[].int m. else c[k++] =b[j++]. while (j<n) c[k++] =b[j++].int c[].

Sign up to vote on this title
UsefulNot useful