My first Magazine pemrograman-kompetitif-dasar | Page 57

5.2 Studi Kasus 1: Merge Sort 5.2.3 Implementasi Merge Sort Algoritma 21 adalah implementasi dari prosedur utama merge sort . Prosedur ini akan mengurutkan array dari indeks le f t hingga right. Prosedur ini secara rekursif akan melakukan proses divide. Jika kita memiliki array dengan panjang N, maka awalnya kita akan memanggil MERGE S ORT (arr, 1, N). Algoritma 21 Algoritma merge sort . 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: procedure MERGE S ORT (arr, le f t, right) if le f t = right then return else mid ← (le f t + right) div 2 MERGE S ORT (arr, le f t, mid) MERGE S ORT (arr, mid + 1, right) MERGE (arr, le f t, mid, mid + 1, right) end if end procedure . Tinggal 1 elemen, sudah pasti terurut Perhatikan bahwa prosedur MERGE S ORT pada Algoritma 21 memanggil prosedur MERGE . Prosedur ini akan menggabungkan dua array yang terurut. Namun secara implementasinya, kita hanya menggunakan satu buah array saja. kedua subarray kita bedakan berdasarkan indeksnya, yang mana array pertama memiliki indeks arr[aLe f t..aRight] sementara array kedua memiliki indeks arr[bLe f t..bRight]. Prosedur ini akan membuat array arr[aLe f t..bRight] menjadi terurut. Prosedur ini dapat dilihat pada Algoritma 22. Algoritma 22 Algoritma untuk menggabungkan 2 array yang terurut. 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: procedure MERGE (arr, aLe f t, aRight, bLe f t, bRight) size ← bRight − aLe f t + 1 . Hitung banyaknya elemen hasil gabungan temp ← new integer[size] . Buat array sementara tIndex ← 0 aIndex ← aLe f t bIndex ← bLe f t . Selama kedua subarray masih ada isinya, ambil yang terkecil dan isi ke temp while (aIndex ≤ aRight) ∧ (bIndex ≤ bRight) do if arr[aIndex] ≤ arr[bIndex] then temp[tIndex] ← arr[aIndex] aIndex ← aIndex + 1 else temp[tIndex] ← arr[bIndex] bIndex ← bIndex + 1 end if tIndex ← tIndex + 1 end while 47