Tukarkan dengan nilai elemen terujung awal yaitu A[6]. Lalu elemen A[6] tersebut udah terurut.
3 9
13 19
21 26
38
Elemen yang tersisa yaitu elemen terakhir A[7] = 38. Elemen tersebut tidak perlu diurutkan karena elemen tersebut berada pada posisi yang sudah terurut. Jadi array atau larik A sudah
terurut. Hasil array A yang sudah terurut yaitu : 3
9 13
19 21
26 38
3.3. Analisis dan Running Time Selection Sort
Running timealgoritma pengurutan seleksi selectionsort dapat dihitung dengan:
Tabel 3.1. Running Time Selection Sort
Cost Times
for i 1 to n-1 do C
1
n i min i
C
2
n-1 for j i+1 to n do
C
3
∑
if A[j] A[i min] C
4
∑
then i min j C
5
∑
Endif
∑
Endfor
∑
temp A[i] C
6
n-1 A[i] A[i min]
C
7
n-1 A[i min] temp
C
8
n-1 Endfor
n
Universitas Sumatera Utara
Keterangan : t
i,j
bernilai 1 jika kondisi if benar, 0 jika salah
∑ ∑
∑
∑
∑ dapat bernilai 1 atau 0.
Ketika kondisi Best Case maka kondisi if salah, t
i,j
= 0. Kondisi best case terjadi jika data dalam elemen array sudah terurut.Maka :
Didapatkan notasi asimptotik best case selection sort adalah Tn =Ω
Ketika kondisi worst case maka kondisi if benar, t
i,j
= 1. Kondisi worst case terjadi jika data dalam elemen array terurut secara terbalik, Maka:
Didapatkan notasi asimptotik best case selection sort adalah Tn=O
Jadi baik dalam kondisi worst case, average case maupun best case didapatkan
kompleksitas waktu algoritma selection sort yaitu :Tn=O
3.4. Selection Sort Model Inser Sisip
Metode insert sisip dimana data paling kecil disisipkan ke elemen pertama ascending dan data paling kecil disisip ke elemen terakhir descending. Contoh, kita memiliki sebuah
larik array yang memiliki 7 buah elemen. Larik tersebut akan diurutkan secara menaik ascending dengan mencari nilai minimum sebagai pembanding.
Universitas Sumatera Utara
3.4.1. Psedocode Selection sort Model insert
function SelectionSortInsertarrayList data for i = 1 to data.length
var int index var int check = data[i]
get index of minimun data in array for j = i to data.length
if data[j] = check index = j
check = data[j] end if
end for var int temp = data[index]
to change index of array item from i to index for k = index down to i + 1
data[k] = data[k-1] end for
move minimum element data[i] = temp
end for return data
end function
3.4.2. Simulasi Algoritma Pengurutan Selection Sort Model Insert
Contoh, kita memiliki sebuah Array larik A yang memiliki 7 buah elemen. Array larik tersebut akan diurutkan secara menaik ascending dengan mencari nilai minimum
sebagai pembanding. 26
19 38
3 9
13 21
1 2
3 4
5 6
7 Pass 1: Pilih data terkecil dari array dan sisipkan ke elemen pertama
3 26
19 38
9 13
21 1
2 3
4 5
6 7
Pass 2: Pilih data terkecil dari array dan sisipkan ke elemen kedua 3
9 26
19 38
13 21
1 2
3 4
5 6
7 Pass 3 :Pilih data terkecil dari array dan sisipkan ke elemen ketiga
Universitas Sumatera Utara
3 9
13 26
19 38
21 1
2 3
4 5
6 7
Pass 4 :Pilih data terkecil dari array dan sisipkan ke elemen ke empat 3
9 13
19 26
38 21
1 2
3 4
5 6
7 Pass 5 :Pilih data terkecil dari array dan sisipkan ke elemen ke lima
3 9
13 19
21 26
38 1
2 3
4 5
6 7
Selesai array dan terurut secara Ascending
3.5. Selection Sort Model New List Dua List
Pilih data terkecil dari list pertama dan buang dari list pertama, pindahkan ke list baru dan seterusnya. Contoh, kita memiliki sebuah list yang memiliki 7 buah elemen. List tersebut
akan diurutkan secara menaik ascending dengan mencari nilai minimum sebagai pembanding.
3.5.1. Psedocode Selection sort with new list
function SelectionSortNewListarrayList data var arrayList temp
for i = 1 to data.length var int index
var int check = data[i] get index of minimun data in array
for j = 1 to data.length if data[j] = check
index = j check = data[j]
end if end for
add new item array to temporary array temp.adddataindex
remove item array with minimum data base on index
data.removeAtindex end for
return temp end function
Universitas Sumatera Utara
3.5.2. Simulasi Algoritma Pengurutan Selection Sort Model New List
Contoh, kita memiliki sebuah list A yang memiliki 7 buah elemen. List tersebut akan diurutkan secara menaik ascending dengan mencari nilai minimum sebagai pembanding
List Pertama New List
26 19
38 3
9 13 21
Pass 1 26 19
38 9
13 21 3
Pass 2 26 19
38 13 21 3
9 Pass 3 26
19 38 21
3 9
13 Pass 4 26
38 21
3 9
13 19
Pass 5 26 38
3 9
13 19
21 Pass 6 38
3 9
13 19
21 26
3 9
13 19
21 26
38
New List sudah terurut secara Ascending
3.6. Penjelasan Singakat Merge Sort
Algoritma merge sort dirancang untuk memenuhi kebutuhan pengurutan jika data yang diurutkan berjumlah banyak, dan tidak memungkinkan untuk ditampung dalam memori
komputer. Cara kerja atau konsep dari algoritma merge sort adalah menggunakan metode rekursif dan teknik divide and conquer.
a. Rekurensi Reccurence
Merupakan sebuah fungsi atau prosedur yang digambarkan secara rekursif. Rekursif adalah proses untuk memanggil dirinya sendiri. Dan fungsi running timenya dapat
digambarkan oleh recurrence Rekurensi. Definisi rekursif disusun oleh dua bagian, yaitu :
1. Basis, yaitu bagian yang berisi kasus yang terdefinisi secara eksplisit dan
berguna untuk menghentikan rekursif memberikan sebuah nilai yang terdefinisi pada fungsi rekursif.
2. Rekurens, yaitu bagian yang mendefinisikan objek dalam terminologi dirinya
sendiri. Misalnya pada proses untuk menghitung faktorial dari n, maka:
Basis : n=1
,n=0
Universitas Sumatera Utara
Rekursi : n=n x n-1 ,n0
b. Divide and Conquer
1. Divide :Membagi sebuah array menjadi dua array, sebuah problem dipecah
menjadi sub-sub problem yang memiliki kemiripan dengan masalah semula namun berukuran lebih kecil.
2. Conquer :Menyelesaikan masalah secara rekursif, yaitu mengurutkan setiap
array.
3.
Combine : Menggabungkan solusi yaitu dua array yang sudah terurut
3.6.1. Pseudocode Merge Sort
PROCEDURE MERGESORTA, p, r IF p r Check for base case
THEN q = FLOOR p + r2 Divide step
MERGESORTA, p, q Conquer step.
MERGESORTA, q + 1, r Conquer step.
MERGEA,p, q, r Conquer step.
PROCEDURE MERGEA, p, q, r
n1 ← q − p + 1 n2 ← r − q
Create arrays L[1 . . n1 + 1] and R[1 . . n2 + 1]
FOR i ← 1 TO n1 DO
L[i] ← A[p + i − 1] FORj ← 1 TO n2
DO R[j] ← A[q + j] L[n1 + 1] ← ∞
R[n2 + 1] ← ∞ i ← 1
j ← 1 FOR k ← p TO r
DO IF L[i] ≤ R[j] THEN A[k] ← L[i]
Universitas Sumatera Utara
i ← i + 1 ELSE A[k] ← R[j]
j ← j + 1
3.6.2. Loop Invariant Pada Prosedure Merge Sort
Statement Setiap iterasi pada for pengulang yang terakhir, sub-array A[p...k-1] berisi nilai k-p
elemen terkecil dari array L dan R dalam keadaan yang sudah terurut. L[i] dan R[j] merupakan elemen terkecil dari array L dan R yang tidak dicopy ke array A.
Initialization Sebelum iterasipertama dilakukan, k = p. Sub-array A[p...k-1] berisi 0 elemen terkecil
dari array L dan R. Ketika i = j = 1, L[i] dan R[j] adalah elemen terkecil dari array yang tidak di-copy ke array A. Kedua array L dan R dalam keadaan yang terurut
Maintenance Misalkan L[i] ≤ R[j], maka L[i] adalah elemen terkecil yang tidak di-copy ke array A.
A[p...k-1] adalah k-p elemen terkecil, L[i] adalah k –p+1
th
elemen terkecil. Kemudian L[i] di-copy ke A[k], A[p...k] berisi k
–p+1 elemen terkecil. Secara berulang, nilai k + i membuat perulangan loop invariant. Jika L[i] R[j], maka nilai R[j] di-copy ke array
A[k], dan nilai j + 1 agar pengulangan dapat terus dilakukan. Termination
Ketika nilai k = r + 1, A[p...k -1] = A[p...r] berisi k-p elemen terkecil dalam keadaan yang terurut. Menghasilkan k-p = r + 1 -p elemen terkecil dalam keadaan yang erurut.
Kedua array L dan R berisi n1 + n2 + 2 = r - p + 3 elemen, dan dua buah ∞ telah di-copy
kembali ke array A.
3.7. Simulasi Algoritma Merge Sort
Contoh, kita memiliki sebuah larik array A yang memiliki 4 buah elemen. Larik tersebut akan diurutkan secara menaik ascending. Dengan nilai p adalah indeks elemen
awal, yaitu p = 0. Nilai r adalah indeks elemen akhir, yaitu r = 3. A[0…3]=
12 9
24 2
Universitas Sumatera Utara
1. MERGESORTA, 0, 3
Kemudian diperiksa apakah jika p r, 0 3, jika benar maka dihitung q = p + r2 = 1.
Kemudian dipanggil MERGESORTA, 0, 1, MERGESORTA, 2, 3 dan MERGEA, 0, , 3
1.1 MERGESORTA, 0, 1
Kemudian diperiksa apakah jika p r, 0 1, jika benar maka dihitung q = p + r2 = 0.
Kemudian dipanggil MERGESORTA, 0, 0, MERGESORTA, 1, 1 dan MERGEA, 0, 0, 1.
A[0…1]= 12
9 1.1.1.
MERGESORTA, 0, 0 Kemudian diperiksa apakah jika p r, 0 0, karena salah maka rekursif
pada bagian ini selesai. 1.1.2.
MERGESORTA, 1, 1 Kemudian diperiksa apakah jika p r, 1 1, karena salah maka rekursif
pada bagian ini selesai. 1.1.3.
MERGEA, 0, 0, 1 Sesuai dengan algoritma maka nilai :
n1 = q − p + 1= 1
n2 = r –q= 1.
Lalu buat dua buah array bernama L dan R dengan jumlah elemen
L[1 . . n1 + 1] yaitu L[1...2]
R[1 . . n2 + 1] yaitu R[1...2] Perulangan pada
FOR i ← 1 TO n1 DO L[i] ← A[p + i − 1]
nilai L[1] = A[0]= 12:
L[1]= 12
Perulangan pada:
FOR j ← 1 TO n2
Universitas Sumatera Utara
DO R[j] ← A[q + j]
nilai R[1] = A[1]= 9. R[1]=
9 Kemudian ditambahkan L[n1 + 1] ← ∞ dan R[n2 + 1] ← ∞, sehingga
L[2] = ∞ dan R[2] = ∞. Sehingga array L dan Rberisi : Array[1]=
12 ∞
dan array R= 9
∞ Kedua array tersebut sudah dalam keadaan terurut.
Nilai i dan j di inisialisasi menjadi i = 1 dan j = 1. Kemudian lakukan pengulangan pada :
FOR k ← p TO r
DO IF L[i] ≤ R[j] THEN A[k] ← L[i]
i ← i + 1 ELSE A[k] ← R[j]
j ← j + 1
Untuk menggabungkan array L dan R ke array A dalam keadaan terurut.
Didapatkan :
o L[1] ≤ R[1], 12 ≤9 = False, maka A[0]= R[1]= 9
o
L[1] ≤ R[2], 12 ≤∞= True, maka A[1]= L[1]= 12 A[0…1]=
9 12
1.2. MERGESORTA, 2, 3
Kemudian diperiksa apakah jika p r, 2 3, jika benar maka dihitung q = p + 2 = 2.
Kemudian dipanggil MERGESORTA, 2, 2, MERGESORTA, 3, 3 dan MERGEA, 2, 2, 3.
A[2…3]= 24
2 1.2.1.
MERGESORTA, 2, 2
Universitas Sumatera Utara
Kemudian diperiksa apakah jika p r, 2 2, karena salah maka rekursif pada bagian ini selesai.
1.2.2. MERGESORTA, 3, 3
Kemudian diperiksa apakah jika p r, 3 3, karena salah maka rekursif pada bagian ini selesai.
1.2.3. MERGEA, 2, 2, 3
Sesuai dengan algoritma maka nilai:
n1 = q − p + 1= 1
n2 = r –q= 1. Lalu buat dua buah array bernama L dan R dengan jumlah elemen
L[1 . . n1 + 1] yaitu L[1...2]
R[1 . . n2 + 1]yaitu R[1...2]
Perulangan pada: FOR i ← 1 TO n1
DO L[i] ← A[p + i − 1]
nilai L[1] = A[2] = 24 L[1]=
24 Perulangan pada:
FOR j ← 1 TO n2
DO R[j ] ← A[q +j]
nilai R[1] = A[3] = 2
R[1]= 2
Kemudian ditambahkan L[n1 + 1] ← ∞ dan R[n2 + 1] ← ∞, sehingga L[2] = ∞ dan R[2] = ∞. Sehingga array L dan R berisi :
Array L= 24
∞ dan array R=
2 ∞
Kedua array tersebut sudah dalam keadaan terurut. Nilai i dan jadi inisialisasi menjadi i= 1 dan j= 1. Kemudian lakukan
pengulangan pada :
FOR k ← p TO r
Universitas Sumatera Utara
DO IF L[i] ≤ R[j] THEN A[k] ← L[i]
i ← i + 1 ELSE A[k] ← R[j]
j ← j + 1
Untuk menggabungkan array L dan R ke array A dalam keadaan terurut.
Didapatkan :
o L[1] ≤ R[1], 24≤2= False, maka A[2] = R[1]= 2
o
L[1] ≤ R[2], 24≤∞= True, maka A[3] = L[1]= 24 A[2…3]=
2 24
1.3. MERGEA, 0, 1, 3
Sesuai dengan algoritma maka nilai :
n1 = q − p + 1= 2
n2 = r – q= 2 Lalu buat dua buah array bernama L dan R dengan jumlah elemen
L[1 . . n1 + 1] yaitu L[1...3]
R[1 . . n2 + 1] yaitu R[1...3]
Perulangan pada:
FOR i ← 1 TO n1 DO L[i] ← A[p + i − 1]
nilai L[1] = A[0] = 9 dan L[2] = A[1] = 12.
A[1…2]= 9
12 Perulangan pada:
FOR j ← 1 TO n2
DO R[j ] ← A[p + j]
Nilai R[1] = A[2] = 2 dan R[2] = A[3] = 24.
A[1…2]= 2
24
Universitas Sumatera Utara
Kemudian ditambahkan L[n1 + 1] ← ∞ dan R[n2 + 1] ← ∞, sehingga L[2] = ∞ dan R[2] = ∞. Sehingga array L dan R berisi :
Array L= 9
12 ∞
dan array R= 2
24 ∞
Kedua array tersebut sudah dalam keadaan terurut. Nilai i dan jadi inisialisasi menjadi i= 1 dan j= 1. Kemudian lakukan
pengulangan pada :
FOR k ← p TO r DO IF L[i] ≤ R[j]
THEN A[k] ← L[i] i ← i + 1
ELSE A[k] ← R[j] j ← j + 1
Untuk menggabungkan array L dan R ke array A dalam keadaan
terurut.
Didapatkan : o
L[1] ≤ R[1],9≤2 = False, maka A[0]= R[1]= 2 o
L[1] ≤ R[2], 9≤24= True, maka A[1]= L[1]= 9. o
L[2] ≤ R[2], 12≤24= True, maka A[2]= L[2]= 12 o
L[3] ≤ R[2], ∞≤24= False, maka A[3]= R[2]= 24 A[0…3]=
2 9
12 24
Universitas Sumatera Utara
Jika digambarkan secara sederhana maka proses eksekusi algoritma merge sort adalah :
Array unsorted A[0…3]
12 9
24 2
devide to sub-array
A[0…1] 12
9 24
2 A[2
…3] devideto
sub-array LR devide to
Sub-array LR 12
9 24
2
L[ ]
merge sort sub-array LR
to array A
R[ ] L[ ]
merge sort sub-array LR
to array A
R[ ]
9 12
2 24
A[2 …3]
Merge sort sub- array to array A
Sorted Array A[0…3]
2 9
12 24
Hasil pengurutannya adalah array A dengan elemen seperti dibawah: A[0…3]=
2 9
12 24
3.8. Analisis Dan Running Time Merge Sort
Merge sort selalu membagi setiap array menjadi dua sub-array hingga mencapai basis, sehingga kompleksitas dari algoritma merge sort, berlaku untuk semua kasus Worst Case
= Best Case = Average Case. Untuk memudahkan, kita anggap jumlah elemen arrayn adalah kelipatan 2, jadi setiap
dilakukan divide pemecahan menjadi dua sub-array, kedua sub-array akan berukuran n2.
Basis : untuk n = 1, maka array tersebut sudah terurut dengan sendirinya. Rekurens : untuk n 1, maka akan dilakukan langkah-langkah merge sort, yaitu:
Divide : Hitung nilai q yang merupakan rata-rata dari p + r, yang bernilai θ1.
Universitas Sumatera Utara
Conquer : Secara rekursif menyelesaikan 2 sub-array, setiap sub-array berukuran n2, maka bernilai 2Tn2
Combine : Menggabungkan element dari sub-array ke dalam array dengan prosedur
MERGE, bernilai θn.
Jumlahkan semua fungsi yang dihasilkan, sehingga dihasilkan rekurens :
{ }
Dari rekurens tersebut di ubah untuk mendapatkan kompleksitas waktu algoritma merge
sort, sehingga Tn=On log n
Catatan : log
2
n =
2
log n Kompleksitas waktu tersebut dapat dijelaskan dari recursif tree berikut :
Array awal cn, yang memiliki dua sub-array, masing-masing bernilai Tn2: cn
Tn2 Tn2
Kemudian sub-array tersebut di bagi lagi menjadi dua sub-sub-array, jadi bernilai Tn4 dan seterusya.
cn
cn2 cn2
Tn4 Tn4 Tn4 Tn4
Di dapatkan tinggi pohon rekursif adalah log n, dan memiliki sebanyak log n+ 1 level.
Setiap level bernilai cn, sehingga cn log n+ cn.
Koefisien tidak perlu dimasukkan, sehingga kompleksitas waktunya menjadi: Tn= On log n
Universitas Sumatera Utara
BAB 4 HASIL DAN PEMBAHASAN
4.1. Pendahuluan Aplikasi ini dibangun dengan menggunakan aplikasi pemrograman Visual Studio 2010.
Adapun uji coba yang dilakukan menggunakan komputer dengan spesifikasi hardware dan software sebagai berikut :
1. Prosesor Core i7 2 GHz
2. RAM, 2 GB
3. Aplikasi Visual Studio 2010
4. OS Win 7 ultimate
4.2. Hasil Uji Coba
Pada penelitian ini dilakukan pengamatan pada 4 metode pengurutan yaitu selection sort, selection model insert, selection sort model new list dan merge sort. Diberikan nilai input
Max Item Value 1000 dan 1000000, sedangkan nilai Max Item pada 10, 500 dan 1000 untuk masing-masing Max Item Value tersebut. Dan data yang diberikan untuk keempat
kondisi tersebut juga sama. Berikut akan ditampilkan hasil pengamatan yang sudahdilakukan.
4.2.1 Pengurutan pada Max Item = 10
Pengurutan pada Max Item 10 dilakukan dengan membandingkan pada 2 nilai Max Item Value yaitu Max Item Value = 1000 dan 1000000.
Universitas Sumatera Utara