4 Pengurutan2

Anda mungkin juga menyukai

Anda di halaman 1dari 25

Algoritma Pemrograman

ALGORITMA PENGURUTAN : I NSERTION SORT & MERGE SORT


N I SA’UL HA F I DHOH , M.T.
T I M A L P RO – T I S 1
Tujuan Pembelajaran
Mahasiswa mampu menjelaskan dan menerapkan algoritma pengurutan:
Insertion Sort dan Merge Sort.
Insertion Sort
Ide dasar: penyisipan
Merupakan algoritma yang efisien untuk menyortir sejumlah kecil
elemen.
Secara sederhana orang-orang biasanya melakukan ini saat bermain
kartu.
◦ Kita mulai dengan tangan kiri yang kosong dan kartu menghadap ke bawah
di atas meja.
◦ Kita kemudian mengeluarkan satu kartu pada satu waktu dari meja dan
memasukkannya ke posisi yang benar di tangan kiri.
◦ Untuk menemukan posisi yang benar untuk sebuah kartu, kita
membandingkannya dengan masing-masing kartu yang ada di tangan, dari
kanan ke kiri.
◦ Setiap saat, kartu-kartu yang dipegang di tangan kiri disortir, dan kartu- (Cormen et al, 2009)
kartu ini awalnya merupakan kartu tumpukan paling atas di atas meja.
Algoritma Insertion sort
Nilai disimpan pada koleksi atau array atau list
Butuh kontainer/variabel temporary untuk menyimpan item
yang akan disisipkan
Lakukan perbandingan secara linear
Geser selama elemen yang baru < elemen kontainer
Mirip dengan selection sort porsi array atau list sebelah kiri
terurut terlebih dahulu.

https://commons.wikimedia.org/wiki/File:I
nsertion_sort_animation.gif
Program: MyLib.py InsertionSort(Notasi)
Fungsi InsertionSort(n:int,A:array)  array dari integer
{n merupakan panjang array, A merupakan array}
{Kamus Lokal}
temp  0
{Algoritma}
for i = 1 to n do
temp  A[i]
j  i-1
while j>=0 and temp < A[j] do
A[j+1]  A[j]
j  j-1
A[j+1]temp
endwhile
endfor
return A
def InsertionSort(n,A): Insertion Sort Python
# n merupakan panjang array, A merupakan array
# Kamus Lokal
temp = 0
# Algoritma
for i in range(1,n):
temp = A[i]
j = i-1
while j>=0 and temp < A[j]:
A[j+1] = A[j]
j = j-1
A[j+1]=temp
return A
Contoh Insertion Sort
Urutkan data berikut dengan insertion sort

9 5 7 2 8
Contoh Insertion Sort
Iterasi 1
temp
Data 9 5 7 2 8
index 0 1 2 3 4
temp < 9

5 9 7 2 8
Contoh Insertion Sort
Iterasi 2
temp
Data 5 9 7 2 8
index 0 1 2 3 4

temp < 9
temp > 5

5 7 9 2 8
Contoh Insertion Sort
Iterasi 3
temp
Data 5 7 9 2 8
index 0 1 2 3 4

temp < 9
temp < 7
temp < 5

2 5 7 9 8
Contoh Insertion Sort
Iterasi 4
temp
Data 2 5 7 9 8
index 0 1 2 3 4

temp < 9

2 5 7 8 9
Analisis

https://www.geeksforgeeks.org/insertion-sort/
Merge Sort
Cocok digunakan untuk data yang sangat besarm sehingga perlu
dipecah-pecah terlebih dahulu, baru diurutkan.
Strategi: Divide and Conquer!
1. Jika panjang list sama dengan 0 atau 1, maka sudah terurut
2. Jika array atau list memiliki lebih dari 1 elemen, list dibagi dua
(split) dan urutkan satu per satu
3. Menggabungkan sublist yang terurut:
1. Lihat pada setiap elemen pertama, pindahkan elemen terendah pada
akhir dari hasil.
2. Ketika salah satu list kosong, copy langsung list sisanya
https://commons.wikimedia.org/wi
ki/File:Merge_sort_animation.gif
Intuisi
Pisahkan (split) list menjadi setengahnya sampai sublist hanya memiliki 1 elemen
Intuisi
Gabungkan (merge) sampai semua sublist akan di urutkan setelahnya.
Intuisi
Gabungkan sublist-sublist yang sudah terurut
Sublist-sublist akan tersorting setelah penggabungan
Intuisi
Gabungkan sublist-sublist yang sudah terurut
Sublist-sublist akan tersorting setelah penggabungan
Intuisi
Selesai
Contoh
Merge Sort
Ilustrasi Merge Sort
Pemecahan Data

6 5 3 1 8 2 4 7

6 5 3 1 8 2 4 7

6 5 3 1 8 2 4 7

6 5 3 1 8 2 4 7
Ilustrasi Merge Sort
Penggabungan dan Pengurutan Data

6 5 3 1 8 2 4 7

5 6 1 3 2 8 4 7

1 3 5 6 2 4 7 8

1 2 3 4 5 6 7 8
Contoh penggabungan (Merging)
List 1 List 2 Perbandingan Hasil
[1,3,5,6] [2,4,7,8] 1,2 [1]
[3,5,6] [2,4,7,8] 3,2 [1,2]
[3,5,6] [4,7,8] 3,4 [1,2,3]
[5,6] [4,7,8] 5,4 [1,2,3,4]
[5,6] [7,8] 5,7 [1,2,3,4,5]
[6] [7,8] 6,7 [1,2,3,4,5,6]
[] [7,8] -,7 [1,2,3,4,5,6,7,8]
[] [] [1,2,3,4,5,6,7,8]
def merge(a, l, m, r):
n1 = m - l + 1
n2 = r - m
Merge Sort Python
L = [0] * n1
R = [0] * n2 Solusi Iteratif
for i in range(0, n1):
L[i] = a[l + i] def mergeSort(n,A):
for i in range(0, n2):
current_size = 1
R[i] = a[m + i + 1]
i, j, k = 0, 0, l while current_size < n - 1:
while i < n1 and j < n2:
if L[i] > R[j]: left = 0
a[k] = R[j]
while left < n-1:
j += 1
else: right = ((2 * current_size + left
a[k] = L[i]
i += 1 - 1, n - 1)[2 * current_size
k += 1
+ left - 1 > n-1])
while i < n1:
a[k] = L[i] merge(A, left, mid, right)
i += 1
k += 1 left = left + current_size*2
while j < n2:
current_size = 2 * current_size
a[k] = R[j]
j += 1 return A
k += 1
Merge sort Analisis
Akan lebih intuitif jika dijelakan secara rekursif yang akan diajarkan setelah tengah semester.
Selamat belajar
Referensi
Introduction to Computer Science and Programming in Python, MIT
https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-0001-introduction-
to-computer-science-and-programming-in-python-fall-2016/lecture-slides-
code/MIT6_0001F16_Lec4.pdf
Guttag, John. Introduction to Computation and Programming Using Python: With Application to
Understanding Data Second Edition. MIT Press, 2016. ISBN: 9780262529624.

Anda mungkin juga menyukai