1 Nama Kelompok : Doddy Setiawan Moh. Abdul Latief Yosep Pangky ALGORITMA MERGE SORT
Merge sort merupakan algoritma pengurutan dalam ilmu komputer yang dirancang untuk memenuhi kebutuhan pengurutan atas suatu rangkaian data yang tidak memungkinkan untuk ditampung dalam memori komputer karena jumlahnya yang terlalu besar. Algoritma ini ditemukan oleh John von Neumann pada tahun ilmu komputerilmu komputer 2
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. bahasa Inggrislarikbahasa Inggrislarik 3
4 VISUALISASI MERGE SORT
5 procedure MergeSort(input/output A : TabelInt, input i, j : integer) { Mengurutkan tabel A[i..j] dengan algoritma Merge Sort Masukan: Tabel A dengan n elemen Keluaran: Tabel A yang terurut }Deklarasi: k : integer Algoritma: if i 1) k ← (i+j) div 2 k ← (i+j) div 2 MergeSort(A, i, k) MergeSort(A, i, k) MergeSort(A, k+1, j) MergeSort(A, k+1, j) Merge(A, i, k, j) Merge(A, i, k, j)endif ALGORITMA MERGE SORT
6 procedure Merge(input/outputA : TabelInt, input kiri,tengah,kanan : integer) { Menggabung tabel A[kiri..tengah] dan tabel A[tengah+1..kanan] menjadi tabel A[kiri..kanan] yang terurut menaik. Masukan: A[kiri..tengah] dan tabel A[tengah+1..kanan] yang sudah terurut menaik. Keluaran: A[kiri..kanan] yang terurut menaik. } Deklarasi B : TabelInt i, kidal1, kidal2 : integer Algoritma: kidal1 ← kiri { A[kiri.. tengah] } kidal2 ← tengah + 1 { A[tengah+1.. kanan] } i ← kiri while (kidal1 ≤ tengah) and (kidal2 ≤ kanan) do if A kidal1 < A kidal2 then B i ← A kidal1 kidal1 ← kidal1 + 1 else B i ← A kidal2 kidal2 ← kidal2 + 1 endif i ← i + 1 endwhile { kidal1 > tengah or kidal2 > kanan }
7 { salin sisa A bagian kiri ke B, jika ada } while (kidal1 ≤ tengah) do B i ← A kidal1 kidal1 ← kidal1 + 1 i ← i + 1 endwhile { kidal1 > tengah } { salin sisa A bagian kanan ke B, jika ada } while (kidal2 ≤ kanan) do B i ← A kidal2 kidal2 ← kidal2 + 1 i ← i + 1 endwhile { kidal2 > kanan } { salin kembali elemen-elemen tabel B ke A } for i ← kiri to kanan do A i ← B i endfor { diperoleh tabel A yang terurut membesar }
k=(i+j) div 2 k=(1+7) div 2 = k=(i+j) div 2 k=(1+4) div 2 = 2 2 k=1
merge B COPY 217
merge 217 B COPY
merge 217 B COPY
k=(i+j) div 2 k=(1+7) div 2 = k=(i+j) div 2 k=(1+4) div 2 = k=1
k=(i+j) div 2 k=(1+7) div 2 = k=(i+j) div 2 k=(1+4) div 2 = MERGE B
k=(i+j) div 2 k=(1+7) div 2 = k=(i+j) div 2 k=(1+4) div 2 = B COPY
k=(i+j) div 2 k=(1+7) div 2 = k=(i+j) div 2 k=(1+4) div 2 = B COPY
k=(i+j) div 2 k=(1+7) div 2 = k=(i+j) div 2 k=(1+4) div 2 = B COPY
k=(i+j) div 2 k=(1+7) div 2 = MERGE B
k=(i+j) div 2 k=(1+7) div 2 = MERGE 2 B
k=(i+j) div 2 k=(1+7) div 2 = MERGE 26 B
k=(i+j) div 2 k=(1+7) div 2 = MERGE B COPY
k=(i+j) div 2 k=(1+7) div 2 = MERGE B COPY
k=(i+j) div 2 k=(1+7) div 2 = k=(i+j) div 2 k=(1+3) div 2 = 2 49 k=1
k=(i+j) div 2 k=(1+7) div 2 = k=(i+j) div 2 k=(1+3) div 2 = 2 49 MERGE B 49 COPY
k=(i+j) div 2 k=(1+7) div 2 = k=(i+j) div 2 k=(1+3) div 2 = 2 11 MERGE B 4
k=(i+j) div 2 k=(1+7) div 2 = B COPY
MERGE B 2
B 24
B 246
B 2469
B
COPY 1714 B
COPY 1714 B
JADI SETELAH DIURUTKAN HASILNYA ADALAH