Merge Sort
Oleh Kelompok 2
Nama Kelompok
1. Chusnul Khotimah (13030214002)
2. Hidayatul Ula (13030214006)
3. Novalia Rachmaniar N S (13030214021)
DEVIDE
(Memecah)
CONQUER
(Menyelesaikan)
Membagi array menjadi
dua secara terus menerus
hingga hanya tersisa satu
elemen pada sub-array
yang terbentuk.
Kemudian elemen-
elemen tersebut di
urutkan lalu di gabung
secara terus menerus
hingga terbentuk array
dengan ukuran yang
sama dengan array asal
Merge
Sort
ALGORITMA
1. Jika bernilai 0 atau 1,
maka array sudah
terurut. Sebaliknya:
3. Urutkan setiap sub-
array. Jika sub-array
tidak cukup kecil,
lakukan rekursif langkah
2 terhadap sub-array.
4. Menggabungkan
dua sub-array
kembali menjadi satu
array yang terurut
2. Bagi array yang tidak terurut
menjadi dua subarray, dimana
bagian pertama merupakan
setengah (jika data genap) atau
setengah minus satu (jika data
ganjil) dari seluruh data.
Contoh
Merge sort memiliki kasus terburuk dan
kasus rata-rata. Kasus terburuk adalah saat
tiap 2 lemen dibandingkan selalu dilakukan
pertukaran. Bila waktu yang diperlukan
untuk melakukan merge sort adalah T(n)
maka untuk saat rekursif waktu yang
dihabiskan adalah T(n) = 2T(n/2) + n. T (n/2)
adalah waktu yang diperlukan untuk merge
setengah dari ukuran list, dan ditambah n
sebagai langkah dari penggabungan list.
Kompleksitas waktu terburuk dan rata-rata
dari merge sort adalah O(n log n)
Kompleksitas Merge Sort
Kompleksitas Merge Sort
Merge Sort akan selalu membagi
dua tiap sub-arraynya, sehingga
kompleksitas dari algoritma Merge
Sort berlaku untuk semua kasus
(Worst Case = Best Case = Average
Case).
Pseudocode Merge Sort
input : Array
output : Array yang terurut
algoritma :
1. if length(m) _ 1 then
2. return m
3. else
4. tengah = length(m) div 2
5. for x = m to tengah do
6. add x to kiri
7. end for
8. for x = m after tengah do
9. add x to kanan
10. end for
11. while length(kiri) > 0 and length(kanan) > 0 do
12. if first(kiri) _ first(kanan) then
13. Append first(kiri) to hasil
14. kiri = rest(kiri)
15. else
16. append first(kanan) to hasil
17. kanan = rest(kanan)
18. end if
19. end while
20. if length(kiri) > 0 then
21. append rest(kiri) to hasil
22. end if
23. if length(kanan) > 0 then
24. append rest(kanan) to hasil
25. end if
26.return hasil

Merge sort

  • 1.
  • 2.
    Nama Kelompok 1. ChusnulKhotimah (13030214002) 2. Hidayatul Ula (13030214006) 3. Novalia Rachmaniar N S (13030214021)
  • 3.
    DEVIDE (Memecah) CONQUER (Menyelesaikan) Membagi array menjadi duasecara terus menerus hingga hanya tersisa satu elemen pada sub-array yang terbentuk. Kemudian elemen- elemen tersebut di urutkan lalu di gabung secara terus menerus hingga terbentuk array dengan ukuran yang sama dengan array asal Merge Sort
  • 4.
    ALGORITMA 1. Jika bernilai0 atau 1, maka array sudah terurut. Sebaliknya: 3. Urutkan setiap sub- array. Jika sub-array tidak cukup kecil, lakukan rekursif langkah 2 terhadap sub-array. 4. Menggabungkan dua sub-array kembali menjadi satu array yang terurut 2. Bagi array yang tidak terurut menjadi dua subarray, dimana bagian pertama merupakan setengah (jika data genap) atau setengah minus satu (jika data ganjil) dari seluruh data.
  • 5.
  • 6.
    Merge sort memilikikasus terburuk dan kasus rata-rata. Kasus terburuk adalah saat tiap 2 lemen dibandingkan selalu dilakukan pertukaran. Bila waktu yang diperlukan untuk melakukan merge sort adalah T(n) maka untuk saat rekursif waktu yang dihabiskan adalah T(n) = 2T(n/2) + n. T (n/2) adalah waktu yang diperlukan untuk merge setengah dari ukuran list, dan ditambah n sebagai langkah dari penggabungan list. Kompleksitas waktu terburuk dan rata-rata dari merge sort adalah O(n log n) Kompleksitas Merge Sort
  • 7.
    Kompleksitas Merge Sort MergeSort akan selalu membagi dua tiap sub-arraynya, sehingga kompleksitas dari algoritma Merge Sort berlaku untuk semua kasus (Worst Case = Best Case = Average Case).
  • 8.
    Pseudocode Merge Sort input: Array output : Array yang terurut algoritma : 1. if length(m) _ 1 then 2. return m 3. else 4. tengah = length(m) div 2 5. for x = m to tengah do 6. add x to kiri 7. end for 8. for x = m after tengah do 9. add x to kanan 10. end for 11. while length(kiri) > 0 and length(kanan) > 0 do 12. if first(kiri) _ first(kanan) then 13. Append first(kiri) to hasil 14. kiri = rest(kiri) 15. else 16. append first(kanan) to hasil 17. kanan = rest(kanan) 18. end if 19. end while 20. if length(kiri) > 0 then 21. append rest(kiri) to hasil 22. end if 23. if length(kanan) > 0 then 24. append rest(kanan) to hasil 25. end if 26.return hasil