You are on page 1of 10

ALGORITMA DAN STRUKTUR DATA

MERGE SORT

IRIANTI H12111284 02 Oktober 2012

MERGE SORT
Merge sort merupakan salah satu algoritma yang digunakan untuk memecahkan masalah pengurutan/sorting. Merge sort menggunakan teknik tingkat lanjut dalam melakukan sorting yakni teknik membagi suatu deret elemen yang akan dilakukan sorting kemudian masing-masing bagian dilakukan sorting secara terpisah dalam mekanisme rekursif. Setelah tiap-tiap bagian dilakukan sorting maka akan dilakukan penyatuan kembali/merge sehingga menghasilkan suatu deret elemen yang terurut. Teknik sorting yang diterapkan oleh algoritma merge sort biasa disebut divide and conquer. 1. Untuk kasus n = 1, maka data terurut dengan sendirinya. 2. Untuk kasus n>1, maka : a. DIVIDE : bagi data menjadi dua bagian, bagian kiri dan bagian kanan, masing masing bagian berukuran n/2 elemen. b. CONQUER c. COMBINE : secara rekursif, terapkan algoritma pada masing-masing bagian. : menggabungkan hasil pengurutan kedua bagian sehingga diperoleh data yang terurut.

Misalkan Merge Sort (A, p, r) di mana A : larik; p : indeks1; r : indeks2 If p<r then qp + r/2 Merge_sort (A,p,q) devide Merge_sort (A, q+1, r) Merge (A,p,q,r) combine

Running Time 1 n/2 T (n/2) T (n/2)

Conquernya : Ambil elemen terkecil dari dua elemen dari urutan paling atas A [p .. q] dan A [q +1 .. r] dan dimasukkan ke dalam urutan yang dihasilkan. Ulangi hal ini, sampai kedua urutan kosong. Menyalin urutan yang dihasilkan menjadi A [p .. r].

Proses berjalannya suatu merge sort 49 27 32 14 58 16 61 77 D e v i d e

49

27

32

14

58
27 49

16
14 32 16

61
58 77

77
61

16 49 32 49 77 58 61 27 16 27 32 14 16 32 77 14 14 16 32 77 61 14 49 32 58 14 61 32 49 32 58 49 61 58 14 1658 77 16 61 49 58 61 32 16 16

58 61

77 77 49 32 77

14 1661 77 61

58 61

27 49 u 14 32 16 58 77 61 14 27 16 58 77

58

77 49 32 58 77 61 77

49 14 32 16 58 16 58 77 61 16 61 49 58

14 16 61 77 58

c o m b i n e c o n q u e r

14

16

27

32

61

77

Implementasi dari Merge Sort Dalam implementasinya, algoritma merge sort memerlukan tiga array yang digunakan sebagai penampungan elemen array sementara. Dua array digunakan untuk menampung elemen array yang dibagi dan satu array lagi digunakan sebagai wadah tempat array output yang telah terurut. Dengan menggunakan array lebih dari satu membuat algoritma ini memerlukan banyak resource system. Akan tetapi hal ini dapat diminimalisir dengan menggunakan dua array seperti yang terlihat pada potongan pseodocode berikut.

Pseudocode utama:

Pseudocode Merge Sort

Pseudocode yang dipanggil dari pseudocode utama

Pseudocode Merge Sort Berikut adalah kode program lengkapnya.


01 public class MergeSort { 02 static int[]data; 03 public static void main(String[] args) { 04 int []array={2,4,0,8,3,4,5}; 05 06 07 08 data=array; tampil(data); int[]wadah=new int[array.length]; recursiveMergeSort(wadah, 0, data.length-1);

09 tampil(data); 10 } 11 12 private static void <strong>recursiveMergeSort</strong>(int[]arr,int kiri,int kanan){ 13 14 15 16 17 18 19 } 20 private static void <strong>merge</strong>(int[] workSpace, int lowPtr, int highPtr, int upperBound) { 22 int j = 0; 21 23 24 25 26 27 28 29 30 31 32 33 34 int lowerBound = lowPtr; int mid = highPtr - 1; int n = upperBound - lowerBound + 1; while (lowPtr <= mid && highPtr <= upperBound) if (data[lowPtr] < data[highPtr]) workSpace[j++] = data[lowPtr++]; Else workSpace[j++] = data[highPtr++]; while (lowPtr <= mid) workSpace[j++] = data[lowPtr++]; } if(kiri<kanan){ int tengah=(kiri+kanan)/2; recursiveMergeSort(arr, kiri, tengah); recursiveMergeSort(arr, tengah+1, kanan); merge(arr, kiri, tengah+1, kanan);

35 36 37 38

while (highPtr <= upperBound) workSpace[j++] = data[highPtr++]; for (j = 0; j < n; j++)

39 data[lowerBound + j] = workSpace[j]; 40 } 41 42 static void tampil(int[]arr){ 43 44 45 46 47 } 48 } for (int i = 0; i < arr.length; i++) { System.out.print(arr[i]+" "); } System.out.println();

Keterangan kode program: 1. Operasi program menggunakan dua array yakni array dengan nama array dan wadah. Array wadah merupakan array kosong yang digunakan untuk menampung output dari proses sorting. 2. Mekanisme rekursif terjadi pada metode rekursif MergeSort. Metode ini selama proses sorting dilakukan proses pemanggilan secara berulang-ulang oleh metode itu sendiri. 3. Kemudian terdapat juga metode menggabungkan yang digunakan untuk menyatukan kembali elemen-elemen yang telah dibagi menjadi suatu array baru yang terurut. 4. Terakhir, ada tampil metode yang digunakan untuk menampilkan data pada console, baik itu data yang belum terurut maupun yang telah melalui proses sorting. 5. Berikut adalah output dari program di atas.

Rekurensi Rekurensi memanggil dirinya sendiri. Rekurensi merupakan persamaan atau pertidaksamaan yang menggambarkan sebuah fungsi yang bernilai lebih kecil dari data masukannya. . Cara
menyelesaikan rekurensi dengan 3 cara, yaitu :

1.

Metode Substitusi Metode ini digunakan dengan cara menebak solusi kemudian dibuktikan dengan induksi matematika. Contoh Selesaikan ( ) Jawab: Misalkan gunakan tebakan ( ( ) ( ) ( ) ( ) ( ) ( ) ) ( ) jika ( ) !

( )

yang berlaku untuk

Contoh Buktikan bahwa ( ) Jawab: 1) Buat tebakan ( ) ( ) berarti ( ) ( ) jika diketahui ( ) ( ) ( )

2) Bukti dengan induksi matematika. Basis induksi: ( ) Langkah induksi: ( ) ( ) ( (

benar untuk

2.

Metode Iterasi atau Pohon Rekursif Metode ini digunakan dengan cara mengubah bentuk rekursif menjadi bentuk penjumlahan, kemudian diselesaikan dengan menggambar pohon rekursifnya.

Contoh : ( ) ( ) ( ( ( ) ( ) ( ) ( )) ( ( ) ( ( ) ( ) )))

Contoh dalam Pohon Rekursif ( ) ( ) ( )

3.

Metode Master Metode ini digunakan untuk menyelesaikan persamaan rekursif dalam bentuk ( ) ( )

( ). Dalam metode master ini, tedapat tiga kasus umum yaitu sebagai berikut. (
( )

Jika ( ) Contoh :

), di mana

, maka ( )

Selesaikan ( ) Jawab: Pada bentuk ini, ( ) (

( )

( ) ) dimana ( )

sehingga,

Jadi solusinya, ( )

Jika ( ) Contoh

), maka

( )

Selesaikan ( ) Jawab: Pada bentuk ini,

sehingga,

Jadi solusinya, ( )

Jika ( )

( )

( ( ( ))

), di mana

dan

( )

( ) untuk

, maka

Contoh Selesaikan ( ) Jawab: Pada bentuk ini, ( ( ) ( ( ) Jadi solusinya, ( ) ( ) ) ( ) ) sehingga, karena, ( ) !

You might also like