1.
Pengertian Sorting
Pengurutan data atau sorting merupakan hal yang sangat
penting dalam kehidupan nyata untuk melakukan pengolahan data.
Pengurutan bisa dilakukan dengan urutan menaik (ascending) atau
dengan urutan menurun (descending). Misalnya, diketahui data
sebagai berikut :
6 1 8 4 9 2 0 7 5 3
2.
Bubble Sort
Bubble sort adalah salah satu pengurutan exchanging yang
bersifat langsung dan termasuk jenis pengurutan yang paling
sederhana. Nama bubble sort sendiri berasal dari sifat nilai elemen
32
terbesar yang selalu naik ( ke akhir dari list) seperti gelembung udara
bubble.
33
Langka
h2
2
2
6
6
3
3
9
9
4
4
7
7
Hasil
Langka
h3
2
2
3
3
6
6
4
4
7
7
9
9
Hasil
Langka
h4
Hasil
Langka
h5
Hasil
:
>
:
<
:
>
:
<
:
<
:
>
:
<
:
>
:
>
7 Tetap
4
4 Tukar
9
4 Tetap
3
3 Tukar
6
7 Tukar
9
7 Tetap
4
4 Tukar
6
9 Tetap
7
7 Tetap
6
: 9 Tetap
>7
U U - 1
endfor
Hasil
Langkah
2
Hasil
Langkah
3
Hasil
Langkah
4
Hasil
Langkah
5
Hasil
:6>2
Tukar
2
2
2
2
2
6
6
6
6
6
9
9
3
3
3
3
3
9
4
4
4
4
4
9
7
7
7
7
7
9
:
:
:
:
9
3
4
7
Tetap
Tukar
Tukar
Tukar
:2<6
Tetap
2
2
2
2
6
3
3
3
3
6
4
4
4
4
6
6
7
7
7
7
9
9
9
9
:6>3
:6>4
:6<7
:
Tukar
Tukar
Tetap
:2<3
Tetap
2
2
2
3
3
3
4
4
4
6
6
6
7
7
7
9
9
9
:3<4
:4<6
Tetap
Tetap
:2<3
Tetap
2
2
3
3
4
4
6
6
7
7
9
9
:3<4
Tetap
:2<3
Tetap
6
9
9
9
<
>
>
>
Min j i;
Min x A[i];
For j i + 1 to n do
If A[j] < min x then
Min j j
Min x A[j]
A[min j] A[i]
A[i] min x
1
Hasil
Langkah
Hasil
Langkah
Hasil
Langkah
Hasil
Langkah
ke-6
2
ke-5
9
3
ke-4
7
4
ke-3
6
5
ke-2
Hasil
For i 2 to n do
Temp A[i];
J i - 1;
While (temp < A[j] and (j>0) do
J j 1
End while
For k i downt j+1 do
A[k] A[k-1}
Endfor
A[j+1] temp;
endfor
10
10
15
15 22
10
22
15
10 15
22
10
15
22
10
15
22
Hasil
1
Hasil
Langkah
2
Hasil
Langkah
:2<6
Tukar
:9>6
Tetap
:3 < 9
Tukar
37
3
2
2
6
3
3
6
9
9
4
4
7
7
:3<6
Tukar
Hasil
Langkah
:4<9
Tukar
2
2
3
3
6
4
4
6
9
9
7
7
:4<6
Tukar
Hasil
Langkah
:7<9
Tukar
5
Hasil
38
L1
1 13
1 1
24
24
L2
2 15
2 15
27
27
30
30
1< 2
2 < 13
L3
1
1 2
3
1
24
27
30
13
<
3
13
5
1
27
30
15
15
<
3
3
13
4
2
5
15
30
24
24
<
3
1
5
1
13
4
24
15
7
2
30
27
27
3
1
5
1
4
2
13
24
15
7
27
30
3
1
5
1
4
2
7
2
8. Merge Sort
Algoritma pengurutan data mergesort dilakukan dengan
menggunakan cara divide-and-conquer yaitu dengan memecah
kemudian menyelesaikan setiap bagian kemudian menggabungkannya
kembali. Pertama data dipecah menjadi 2 bagian dimana bagian
pertama merupakan setengah (jika data genap) atau setengah minus
satu (jika data ganjil) dari seluruh data, kemudian dilakukan
pemecahan kembali untuk masing-masing blok sampai hanya terdiri
dari satu data tiap blok.
Setelah itu digabungkan kembali dengan membandingkan pada
blok yang sama apakah data pertama lebih besar daripada data ketengah+1, jika ya maka data ke-tengah+1 dipindah sebagai data
pertama, kemudian data ke-pertama sampai ke-tengah digeser
menjadi data ke-dua sampai ke-tengah+1, demikian seterusnya
sampai menjadi satu blok utuh seperti awalnya. Sehingga metode
mergesort merupakan metode yang membutuhkan fungsi rekursi
untuk penyelesaiannya.
Dengan hal ini deskripsi dari algoritma dirumuskan dalam 3
langkah berpola divide-and-conquer. Berikut menjelaskan langkah
kerja dari Mergesort.
a. Divide
Memilah elemen elemen dari rangkaian data menjadi dua bagian.
b. Conquer
Conquer setiap bagian dengan memanggil prosedur
mergesortsecararekursif
c. Kombinasi
Mengkombinasikan dua bagian tersebut secara rekursif untuk
mendapatkan rangkaian data berurutan
Algoritma Merge Sort
Procedure Merge(input/output A, B : Larik, Output Awal,Tengah,Akhir :
integer)
39
Deklarasi
I, J, K, T : integer
Deskripsi
I Awal
K Awal
J Tengah + 1
ALGORITMA
If A[I] < A[J] then {elemen sebelah kiri lebih kecil}
B[K] A[I]
I I + 1
Else
B[K] A[J] {elemen sebelah kanan lebih besar}
J J + 1
Endif
K K + 1
While ((I <= Tengah) or (J <= Akhir))
{memasukkan sisa elemen saat 2 larik tidak sama panjang}
if I > Tengah then {larik kiri lebih dulu habis}
for T J to Akhir
B[K+T-J] A[T]
Endfor
Else {elemen kanan habis lebih dulu}
For T I to Tengah
B[K+T-I] A[T]
Endfor
Endif
Procedure Iterasi(input/output A, B : Larik, Input N, Cacah : integer)
Deklarasi
I, T : integer
Algoritma
I 1
While I < (N 2*Cacah + 1) do
Merge(A, B, I, I+Cacah-1, N)
I I + 2*Cacah
Endwhile
If (I+Cacah-1) < N then {penggabungan ke sublarik}
Merge(A, B, I, I+Cacah-1, N)
Else
For T I to N do
B[T] A[T]
Endfor
Endif
Algoritma Mergesort
{mengurutkan elemen larik sehingga tersusun menaik dengan metode
pengurutan merge}
{k.awal: elemen-elemen larik yang sudah terdefinisi nilainya}
{k.akhir: elemen-elemen larik terurut menaik}
Deklarasi
Cacah : integer
B : Larik
Algoritma
Cacah 1
While Cacah < N do
Iterasi(A, B, N, Cacah)
Cacah Cacah * 2
40
Iterasi(B, A, N, Cacah)
Cacah Cacah * 2
Endwhile
Contoh :
15
1
45
12
56
13
10
43
34
5
41