Anda di halaman 1dari 8

Merge Sort

Definisi Algoritma Algoritma adalah kumpulan langkah sistematis untuk memperoleh hasil yang diinginkan1. Sebelum sebuah algoritma dijalankan, biasanya ada suatu kondisi awal (initial state) yang harus dipenuhi. Kemudian, langkah-langkah ini diproses hingga mencapai suatu kondisi akhir (final state). Salah satu contoh dari algoritma adalah Sorting (pengurutan).

Definisi Sorting
Sorting merupakan suatu proses untuk menyusun kembali humpunan obyek menggunakan aturan tertentu. Sorting disebut juga sebagai suatu algoritma untuk meletakkan kumpulan elemen data kedalam urutan tertentu berdasarkan satu atau beberapa kunci dalam tiap-tiap elemen. Pada dasarnya ada dua macam urutan yang biasa digunakan dalam suatu proses sorting: 1. urut naik (ascending) Mengurutkan dari data yang mempunyai nilai paling kecil sampai paling besar 2. urut turun (descending) Mengurutkan dari data yang mempunyai nilai paling besar sampai paling kecil. Mengapa harus melakukan sorting data? Ada banyak alasan dan keuntungan dengan mengurutkan data. Data yang terurut mudah untuk dicari, mudah untuk diperiksa, dan mudah untuk dibetulkan jika terdapat kesalahan. Data yang terurut dengan baik juga mudah untuk dihapus jika sewaktu-waktu data tersebut tidak diperlukan lagi. Selain itu, dengan mengurutkan data maka kita semakin mudah untuk menyisipkan data atapun melakukan penggabungan data.

Merge Sort
Sekilas Tentang Merge Sort
Algoritma Merge Sort ditemukan oleh John von Neumann di tahun 1945. Merge Sort termasuk paradigma algoritma divide and conquer (kurang lebih berarti: bagi dan atasi). Hal ini dikarenakan algoritma ini melakukan pembagian struktur data sebelum kemudian dioperasi satu per satu. Intinya, algoritma ini menggunakan dua ide utama sebagai berikut, 1. Sebuah list yang kecil membutuhkan langkah yang lebih sedikit untuk pengurutan daripada sebuah list yang besar. 2. Untuk membentuk sebuah list terurut dari dua buah list terurut membutuhkan langkah yang lebih sedikit daripada membentuk sebuah list terurut dari dua buah list tak terurut. Contohnya hanya diperlukan satu kali traversal untuk masing-masing list jika keduanya sudah terurut.

Algoritma Merge Sort


Prinsip utama yang diimplementasikan pada algoritma merge-sort seringkali disebut sebagai pecah-belah dan taklukkan (bahasa Inggris: divide and conquer). Cara kerja algoritma merge sort adalah membagi larik data yang diberikan menjadi dua bagian yang lebih kecil. Kedua larik yang baru tersebut kemudian akan diurutkan secara terpisah. Setelah kedua buah list tersusun, maka akan dibentuk larik baru sebagai hasil penggabungan dari dua buah larik sebelumnya. Menurut keefektifannya, alogaritma ini bekerja dengan tingkat keefektifan O(nlog(n)).

Merge Sort
Untuk lebih jelasnya, perhatikan gambar berikut:

Gambar 1. Skema ini menggambarkan Merge Sort dalam menangani pengurutan tabel dengan 7 elemen.

Algoritma penggabungan dapat dituliskan sebagai berikut : 1. i 0 2. j 0 3. J3 0 4. Kerjakan baris 5 sampai dengan 7 selama (i < J1) atau (j < J2) 5. J3 J3 + 1 6. Jika (T1[i] < T2[j]) maka T3[J3] T1[i], i i + 1 7. Jika (T1[i] >= T2[j]) maka T3[J3] T2[j], j j + 1 8. Jika (i > J1) maka kerjakan baris 9, jika tidak kerjakan baris 15 9. i j 10. Selama (i < J2) kerjakan baris 11 sampai dengan 13 11. J3 J3 + 1 12. T3[J3] T2[i]

Merge Sort
13. i i + 1 14. Selesai 15. j i 16. Selama (j < J1) kerjakan baris 17 sampai dengan 19 17. J3 J3 + 1 18. T3[J3] T1[j] 19. j j + 1

Contoh penerapan atas sebuah larik sebagai data sumber yang akan diurutkan {3, 9, 4, 1, 5, 2} adalah sebagai berikut:

Larik tersebut dibagi menjadi dua bagian, {3, 9, 4} dan {1, 5, 2} Kedua larik kemudian diurutkan secara terpisah sehingga menjadi {3, 4, 9} dan {1, 2, 5} Sebuah larik baru dibentuk yang sebagai penggabungan dari kedua larik tersebut {1}, sementara nilai-nilai dalam masing larik {3, 4, 9} dan {2, 5} (nilai 1 dalam elemen larik ke dua telah dipindahkan ke larik baru)

langkah berikutnya adalah penggabungan dari masing-masing larik ke dalam larik baru yang dibuat sebelumnya.
o o o o o

{1, 2} <-> {3, 4, 9} dan {5} {1, 2, 3} <-> {4, 9} dan {5} {1, 2, 3, 4} <-> {9} dan {5} {1, 2, 3, 4, 5} <-> {9} dan {null} {1, 2, 3, 4, 5, 9} <-> {null} dan {null}

Merge Sort
Di bawah ini merupakan prosedur penggabungan dua kumpulan data yang sudah dalam keadaan urut. void MergeSort(int T1[],int T2[],int J1,int J2, int T3[],int *J3) { int i=0, j=0; int t=0; while ((i<J1) || (j<J2)) { if (T1[i] < T2[j]) T3[t] = T1[i]; i++; } else { T3[t] = T2[j]; j++; } t++; } if (i > J1) for (i=j; i<J2; i++) T3[t] = T2[i]; t++; } if (j > J2) { {

Merge Sort
for (j=i; j<J1; j++) T3[t] = T1[j]; t++; } *J3 = t; } {

Kompleksitas Merge Sort Untuk pengurutan n elemen, merge sort memiliki kompleksitas O(nlogn) . Kompleksitas ini, juga berlaku untuk kasus terburuk. Jika running time untuk merge sort terhadap struktur data dengan banyak elemen n adalah T(n) , maka recurrence-nya T(n) = 2T(n / 2) + n berdasarkan definisi dari algoritma. Algoritma ini jelas lebih mangkus daripada algoritmaalgoritma sebelumnya. Algoritma ini rekursif, sehingga algoritma ini menjadi pilihan buruk jika ingin dijalankan di mesin computer dengan memori yang terbatas. Perhatikan gambar! Bandingkan dengan algoritma-algoritma dengan kompleksitas O(n2) sebelumnya yang ketika diimplementasikan umumnya membutuhkan waktu di atas 100 detik ketika menangani table dengan ribuan elemen. Perhatikan gambar di bawah ini:

Merge Sort

Gambar 2. Grafik Efisiensi Merge Sort

Tidak ada algoritma terbaik untuk setiap situasi yang kita hadapi, bahkan cukup sulit untuk menentukan algoritma mana yang paling baik untuk situasi tertentu karena ada beberapa faktor yang mempengaruhi efektifitas algoritma pengurutan. Beberapa faktor yang berpengaruh pada efektifitas suatu algoritma pengurutan antara lain: 1. Banyak data yang diurutkan. 2. Kapasitas pengingat apakah mampu menyimpan semua data yang kita miliki. 3. Tempat penyimpanan data

Merge Sort
Referensi 1. http://fullsearching.blogspot.com/2009/07/merge-sort-dev-pascal.html 2. http://hack.spyrozone.net/0221_Struktur_Data_Sorting_Method_by_y3ppy_WWW.SPY ROZONE.NET_07_Oktober_2007.html 3. http://informatika.stei.itb.ac.id/~rinaldi.munir/Matdis/20072008/Makalah/MakalahIF2153-0708-112.pdf 4. http://lecturer.eepisits.edu/~entin/Struktur%20Data%20%26%20Algoritma/buku/Data%20Structure%20%20Bab%206.pdf 5. http://id.wikipedia.org/wiki/Merge_sort

Anda mungkin juga menyukai