Anda di halaman 1dari 45

1

BAB VI
PENGURUTAN DATA (SORTING)

Pengurutan data atau sorting merupakan salah satu jenis operasi penting dalam
pengolahan data. Hampir setiap saat dalam kehidupan sehari-hari kita selalu
menjumpai permasalahan-permasalahan yang harus diselesaikan dengan
melibatkan operasi pengurutan data. Begitu pentingnya operasi tersebut,
sehingga

sampai

saat

ini

telah

banyak

dikembangkan

metoda-metoda

pengurutan data dan mungkin akan tetap bermunculan metoda-metoda baru.


Pembahasan dalam bab ini akan meninjau tentang beberapa algoritma metoda
pengurutan data yang dapat diterapkan dalam program-program aplikasi.

Sebelum meninjau lebih lanjut tentang metoda pengurutan data, ada baiknya
perlu diketahui terlebih dahulu tentang urutan data. Pada dasarnya terdapat dua
macam kondisi data urut, yaitu urut naik (ascending) dan urut turun (descending).
Data berada dalam kondisi urut naik jika data pada urutan lebih awal mempunyai
harga yang lebih kecil dari pada data pada urutan berikutnya. Sebaliknya, data
disebut urut turun jika harga data pada urutan yang lebih awal lebih besar
daripada data pada urutan berikutnya. Untuk lebih jelasnya, di bawah ini
diberikan contoh sekumpulan data dalam kondisi urut naik dan urut turun, yaitu
sebagai berikut :

Ascending

: 40 47 51 52 69 70 72 84 90

Descending

: 90 84 72 70 69 52 51 47 40

Saat ini telah dikenal beberapa metoda pengurutan data, antara lain seleksi
langsung (straight selection), gelembung (buble-sort atau excenge sort),
penyisipan langsung (straight insertion), penyisipan biner (binary insertion), shell
sort (diminishing increment sort), quick sort (partition excenge sort), radix sort
serta merge sort (two_way merge sort).

Umumnya dalam cacah data yang sedikit, penggunaan metoda seleksi langsung
atau penyisipan langsung akan lebih efisien dan menguntungkan. Namun dalam

cacah data yang cukup banyak kedua metoda tersebut akan tidak efisien lagi.
Masing-masing metoda tentu saja mempunyai keunggulan dan kelemahan yang
dapat saling dibandingkan. Kesesuaian metoda yang digunakan dalam sebuah
aplikasi adalah ditentukan oleh kecepatan dalam mengurutkan data-data yang
dalam kenyataannya sangat ditentukan oleh banyaknya langkah yang harus
dilakukan untuk membandingkan harga setiap data dan menentukan lokasi data
dalam urutan. Semakin sedikit waktu yang diperlukan untuk memperoleh data
urut berarti metoda tersebut relatif lebih baik.

6.1. Metoda Seleksi Langsung (Straight Selection)

Prosedur pengurutan data dengan metoda seleksi langsung cukup sederhana


dan mudah dipahami. Untuk memperoleh data dalam kondisi urut naik, maka
prosedur yang dilakukan dalam metoda ini dapat dijelaskan sebagai berikut.
Pada langkah pertama, data terkecil harus dicari dari seluruh data dan kemudian
ditempatkan pada posisi urutan pertama. Langkah kedua adalah mencari data
terkecil kedua dari seluruh data kecuali data pertama, dan kemudian ditempatkan
pada posisi urutan kedua. Langkah ketiga adalah mencari data terkecil ketiga
dari seluruh data kecuali data pertama dan kedua, dan kemudian ditempatkan
pada posisi urutan ketiga. Demikian secara terus menerus akan diulangi proses
tersebut hingga semua data akan menempati posisinya secara tepat sehingga
menghasilkan sekumpulan data yang urut.

Proses dalam langkah pertama dilakukan dengan cara mengambil data pertama
dan kemudian dibandingkan dengan data kedua. Bila harga data pertama lebih
besar dari harga data pada urutan kedua, maka tukarkan harga data pertama
dengan harga data kedua. Jika data kedua lebih besar dari harga data pertama,
maka proses dilanjutkan untuk membandingkan data pertama dengan data
ketiga. Jika data pertama lebih besar, maka tukarkan data pertama dengan data
ketiga. Teruskan proses tersebut hingga data pertama selesai dibandingkan
dengan seluruh data yang ada, sehingga akhirnya akan akan diperoleh harga
data terkecil. Hasilnya kemudian ditempatkan pada urutan pertama. Karena data

terkecil telah menempati lokasi yang benar, maka pada langkah selanjutnya data
pertama tidak perlu diproses lagi.

Pada langkah kedua, data kedua dibandingkan dengan data ketiga. Bila data
kedua lebih besar dari data urutan ketiga, maka tukarkan data kedua dengan
data ketiga. Jika data ketiga lebih besar, maka proses dilanjutkan untuk
membandingkan data kedua dengan data keempat. Jika data kedua lebih besar,
maka tukarkan data kedua dengan data keempat. Teruskan proses tersebut
hingga data kedua selesai dibandingkan dengan seluruh data yang ada,
sehingga akhirnya akan diperoleh data terkecil. Hasilnya kemudian ditempatkan
pada urutan kedua. Karena data terkecil kedua telah menempati lokasi yang
benar, maka pada langkah selanjutnya data kedua tidak perlu diproses lagi. Pada
langkah-langkah selanjutnya, ulangi proses tersebut untuk menemukan data
terkecil ketiga, keempat, kelima, dan seterusnya hingga semua data akan
menempati lokasi yang tepat. Pada akhirnya kita akan memperoleh data dalam
kondisi urut naik.

Jika data-data diinginkan berada dalam kondisi urut turun maka proses
perbandingannya tinggal dibalik saja. Pada langkah pertama data pertama
dibandingkan dengan data kedua. Bila harga data pertama lebih kecil dari harga
data pada urutan kedua, maka tukarkan data pertama dengan data kedua. Jika
data kedua lebih kecil dari harga data pertama, maka proses dilanjutkan untuk
membandingkan data pertama dengan data ketiga. Jika data pertama lebih kecil,
maka tukarkan data pertama dengan data ketiga. Teruskan proses tersebut
hingga data pertama selesai dibandingkan dengan seluruh data yang ada,
sehingga akhirnya akan diperoleh data terbesar. Hasilnya kemudian ditempatkan
pada urutan pertama. Karena data terbesar telah menempati pada lokasi yang
benar, maka pada langkah selanjutnya data pertama tidak perlu diproses lagi.

Pada langkah kedua, data kedua dibandingkan dengan data ketiga. Bila data
kedua lebih kecil dari pada data ketiga, maka tukarkan data kedua dengan data
ketiga. Jika data ketiga lebih kecil dari harga data kedua, maka proses
dilanjutkan untuk membandingkan data kedua dengan data keempat. Jika data
kedua lebih kecil, maka tukarkan data kedua dengan data keempat. Teruskan

proses tersebut hingga data kedua selesai dibandingkan dengan seluruh data,
sehingga akhirnya akan diperoleh data terbesar. Hasilnya kemudian ditempatkan
pada urutan kedua. Karena data terbesar telah menempati pada lokasi yang
benar, maka pada langkah selanjutnya data kedua tidak perlu diproses lagi.

Proses pada langkah-langkah selanjutnya adalah mengulangi proses tersebut di


atas untuk menemukan data terbesar ketiga, keempat, kelima, dan seterusnya
hingga semua data akan menempati lokasi yang tepat. Sehingga pada akhirnya
akan diperoleh data dalam kondisi urut turun.

Untuk lebih jelasnya berikut ini akan diberikan contoh penggunaan metoda
seleksi langsung untuk mengurutkan data-data secara urut naik dan urut turun.
Data-data yang akan diurutkan adalah sebagai berikut :
Contoh :
12

29

17

56

11

23

Langkah-langkah yang dilakukan dalam proses pengurutan data secara urut naik
adalah ditunjukkan pada Tabel 6.1. Dalam tabel tersebut, data yang bergaris
bawah merupakan data terkecil yang harus ditemukan dan diurutkan pada
langkah berikutnya. Sedangkan Tabel 6.2 menunjukan proses pengurutan data
secara urut turun. Dalam tabel tersebut, data yang bergaris bawah merupakan
data terbesar yang harus ditemukan dan diurutkan pada langkah berikutnya.

Tabel 6.1 : Contoh pengurutan data secara urut naik dengan metoda seleksi
langsung
Iterasi Ke :

Hasil proses

12

29

17

56

11

23

11

12

29

17

56

23

11

12

17

29

56

23

11

12

17

23

29

59

11

12

17

23

29

59

11

12

17

23

29

59

Tabel 6.2 : Contoh pengurutan data secara urut turun dengan metoda seleksi
langsung
Iterasi Ke :

Hasil proses

12

29

17

56

11

23

56

11

12

29

17

23

56

29

11

12

17

23

56

29

23

11

12

17

56

29

23

17

11

12

56

29

23

17

12

11

Dalam metoda seleksi langsung kita harus memperhatikan seluruh elemen data
sumber untuk kemudian menentukan satu elemen data untuk ditempatkan pada
tujuan (multiple source one destination).

Flowchart prosedur pengurutan data secara urut naik dengan metoda seleksi
langsung adalah seperti ditunjukan pada Gambar 6.1. Dalam flowchart prosedur
tersebut digunakan beberapa variable bantuan, yaitu I, N, J, X, LOKASI, dan
BANTU. Variable I dan J dipergunakan sebagai pencacah. Variabel N
menunjukan cacah data yang akan diurutkan. Variabel X digunakan untuk
menyimpan harga data-data yang akan diurutkan. Sedangkan variabel LOKASI
dan BANTU dipergunakan sebagai variabel bantuan untuk proses pertukaran
lokasi data-data guna mengurutkan data.

Mulai

Baca N,X[I]

FOR I = 1 TO N-1

LOKASI = J

FOR J = I+1 TO N
TIDAK

YA
X[LOKASI] > X[J]
LOKASI = J

BANTU=X[I]
X[I]=X[LOKASI]
X[LOKASI]=BANTU

NEXT J

NEXT I

Cetak hasil

Selesai

Gambar 6.1: Flowchart prosedur pengurutan data secara urut naik dengan
metoda seleksi langsung

Solusi dalam bentuk algoritma untuk mengurutkan data secara urut naik dengan
metoda seleksi langsung dapat dituliskan sebagai berikut :

Masukan vektor K yang memuat N buah data yang akan diurutkan.


Data-data yang akan diurutkan dibaca sebagai X.
1. Mulai
2. Proses berulang langkah-3 s/d langkah-5
FOR I = 1 TO N-1
3. Tentukan harga awal
LOKASI = I
4. Proses berulang untuk membandingkan harga data-data
FOR J = I +1 TO N
IF (X[LOKASI] > X[J]
Jika ya, tentukan LOKASI = J
Jika tidak, lanjutkan ke langkah-6
5. Tentkan posisi data X[I] dengan X[LOKASI]
BANTU = X[I]
X[I] = X[LOKASI]
X[LOKASI] = BANTU
6. Cetak hasil
7. Selesai

Gambar 6.2 adalah menunjukkan flowchart prosedur pengurutan data secara


urut turun dengan metoda seleksi langsung. Dalam flowchart prosedur tersebut,
digunakan beberapa variabel bantuan, yaitu I, N, J, X, LOKASI, dan BANTU.
Variabel I dan J dipergunakan sebagai pencacah. Variabel N menunjukkan cacah
data yang akan diurutkan. Variabel X digunakan untuk menyimpan harga-harga
data

yang

akan

diurutkan.

Sedangkan

variabel

LOKASI

dan

BANTU

dipergunakan sebagai variabel bantuan untuk proses pertukaran lokasi data-data


guna mengurutkan data.

Solusi dalam bentuk algoritma untuk mengurutkan data secara urut turun dengan
metoda seleksi langsung dapat dituliskan sebagai berikut :

Masukkan vektor K yang memuat N buah data yang akan diurutkan.


Data-data yang akan diurutkan dibaca sebagai X.
1. Mulai
2. Proses berulang langkah-3 s/d langkah-5
FOR I = 1 TO N-1
3. Tentukan harga awal
LOKASI = I
4. Proses berulang untuk membandingkan harga data-data
FOR J = I +1 TO N
IF (X[LOKASI] < X[J]
Jika ya, tentukan LOKASI = J
Jika tidak, lanjutkan ke langkah-6
5. Tentkan posisi data X[I] dengan X[LOKASI]
BANTU = X[I]
X[I] = X[LOKASI]
X[LOKASI] = BANTU
6. Cetak hasil
7. Selesai

Mulai

Baca N, X

FOR I = 1 TO N-1

LOKASI = J

FOR J = I+1 TO N

TIDAK

X[LOKASI] < X[J]

YA

LOKASI = J

BANTU=X[I]
X[I]=X[LOKASI]
X[LOKASI]=BANTU

NEXT J

NEXT I

Cetak hasil

Selesai

Gambar 6.2: Flowchart prosedur pengurutan data secara urut turun dengan
metoda seleksi langsung

10

Dalam metoda seleksi langsung, banyaknya proses perbandingan antar data


yang harus dilakukan untuk menemukan harga terkecil atau data terbesar pada
setiap langkah adalah sebanyak N -1. untuk mengurutkan seluruh data dalam
vektor asal / sumber, maka cacah total proses perbandingan yang harus
dilakukan dapat dihitung dengan formula sebagai berikut :

( N I ) N ( N 1) N 2 N
=
2
2
I =1 =

N 1

K =
Keterangan:

: cacah total proses perbandingan

: cacah data

: langkah pengurutan

Dalam cacah data yang cukup besar, penggunaan metoda ini akan menjadi
sangat tidak efisien, karena memerlukan banyak langkah perbandingan sehingga
akan memerlukan waktu yang relatif lama.

6.2. Metoda Gelembung (Buble Sort)

Dalam beberapa kesempatan, metoda gelembung (bublesort) disebut pula


sebagai metoda exchange sort. Untuk mengurutkan data secara urut naik, jika
dibandingkan dengan metoda seleksi langsung maka metoda gelembung
memiliki perbedaan dalam menemukan elemen data terkecil dan cara pertukaran
datanya.

Langkah pertama pengurutan data secara urut naik dengan metoda gelembung
adalah membandingkan harga data pertama dengan data kedua. Jika harga data
pertama lebih besar maka tukarkan posisinya dengan data kedua. Kemudian
data kedua dibandingkan dengan data ketiga, tukarkan jika data kedua lebih
besar dari data ketiga. Selanjutnya, data ketiga dibandingkan dengan data
keempat, tukarkan jika data ketiga lebih besar dari data keempat. Proses seperti
ini akan diulang secara terus menerus hingga semua data selesai dibandingkan.

11

Hasil pada langkah pertama adalah menempatkan data terbesar pada urutan
terakhir. Data terbesar yang telah menempati posisi terakhir tersebut tidak perlu
di proses lagi pada langkah selanjutnya.

Pada langkah kedua, harga data pertama dibandingkan dengan data kedua. Jika
harga data pertama lebih besar maka ditukarkan posisinya dengan data kedua.
Kemudian data kedua dibandingkan dengan data ketiga, tukarkan posisinya jika
data kedua lebih besar dari data ketiga. Selanjutnya, data ketiga dibandingkan
dengan data keempat, tukarkan jika data ketiga lebih besar dari data keempat.
Proses tersebut diulang secara terus menerus hingga semua data selesai
dibandingkan. Hasil pada langkah kedua adalah menempatkan data terbesar
pada urutan terakhir. Sehingga data terbesar yang diperoleh tersebut akan
menempati pada urutan kedua dari belakang dari keseluruhan data hasil
pengurutan. Data terbesar yang telah menempati posisi terakhir tersebut tidak
perlu di proses lagi pada langkah selanjutnya.

Jika K menyatakan cacah proses membandingkan yang harus dilakukan untuk


mengurutkan

semua

data

dengan

metoda

gelembung,

maka

perbandingan tersebut dapat dihitung dengan formula sebagai berikut :

K=

N2 N
2

Dimana ,
K

: cacah proses perbandingan

: cacah data

cacah

12

Mulai

Baca N, [I]

FOR I = 1 TO N-1

FOR J = I+1 TO N-1

TIDAK

YA
X[J] > X[J+1]
BANTU=X[I]
X[J]=X[J+1]
X[J+1]=BANTU

NEXT J

NEXT I

Cetak hasil

Selesai

Gambar 6.3: Flowchart prosedur pengurutan data secara urut naik dengan
metoda gelembung

Untuk memperjelas tentang proses pengurutan data dengan metoda gelembung,


berikut diberikan contoh penerapannya. Terdapat enam elemen data yang akan
diurutkan secara naik, yaitu sebagai berikut :

13

Contoh :
87

74

71

54

88

60

Dari contoh data sumber tersebut, maka langkah proses pengurutan dengan
menggunakan metoda gelembung dapat ditelusuri sebagimana ditunjukkan pada
Tabel 6.3. Dalam tabel tersebut, data yang bergaris bawah merupakan data
terbesar yang harus ditemukan dan diurutkan pada langkah berikutnya dan akan
menempati posisi paling akhir sebelum elemen-elemen data yang telah diurutkan
pada langkah sebelumnya.

Tabel 6.3: Contoh pengurutan data secara urut naik dengan metoda gelembung
Iterasi Ke :

Hasil proses

87

74

71

54

88

60

74

71

54

87

60

88

71

54

74

60

87

88

54

71

74

60

87

88

54

60

71

74

87

88

54

60

71

74

87

88

Hasil akhir yang diperoleh adalah sekumpulan data urut naik, yaitu sebagai
berikut :

54

60

67

74

88

Flowchart prosedur pengurutan data secara urut naik menggunakan metoda


gelembung adalah ditunjukkan pada Gambar 6.3.

Solusi dalam bentuk algoritma untuk mengurutkan data secara urut naik dengan
metoda gelembung dapat dituliskan sebagai berikut :

Masukkan vektor K yang memuat N buah data yang akan diurutkan.

14

Data-data yang akan diurutkan dibaca sebagai X.


1. Mulai
2. Proses berulang langkah-3
FOR I = 1 TO N-1
3. Proses berulang langkah-4
FOR J = 1 TO N-I
4. Proses berulang untuk membandingkan harga data-data
IF X[J] > X[J+1]
Jika ya, lakukan penggeseran
BANTU = X[J]
X[J] = X[J+1]
X[J+1] = BANTU
5. Cetak hasil
6. Selesai

Jika data dalam contoh di atas akan diurutkan secara urut turun, maka langkah
proses pengurutan di atas tinggal dibalik saja, yaitu pada saat membandingkan
harga data. Untuk mendapatkan data urut turun, maka data terkecil yang
ditemukan pada setiap langkah perbandingan dan pertukaran akan dicari dari
keseluruhan data sumber dan ditempatkan pada posisi urutan terakhir.

Secara

ringkas,

langkah

pengurutan

data

secara

urut

turun

dengan

menggunakan metoda gelembung dapat ditelusuri sebagaimana ditunjukkan


pada Tabel 6.4. Dalam tabel tersebut, data yang bergaris bawah merupakan
data terkecil yang harus ditemukan dan diurutkan pada langkah berikutnya dan
akan menempati posisi paling akhir sebelum elemen-elemen data yang telah
diurutkan pada langkah sebelumnya.

15

Tabel 6.4: Contoh pengurutan data secara urut turun dengan metoda gelembung
Iterasi Ke :

Hasil proses

87

74

71

54

88

60

74

71

71

88

60

54

87

74

71

88

60

54

87

74

88

71

60

54

87

88

74

71

60

54

88

87

74

71

60

54

Hasil akhir yang diperoleh adalah sekumpulan data urut turun, yaitu sebagai
berikut :

88

87

74

71

60

54

Solusi dalam bentuk algoritma untuk mengurutkan data secara urut turun dengan
metoda gelembung dapat dituliskan sebagi berikut ini :

Masukkan vektor K sebanyak N buah data yang akan diurutkan.


Data-data yang akan diurutkan dibaca sebagai X.
1. Mulai
2. Proses berulang langkah-3
FOR I = 1 TO N-1
3. Proses berulang langkah-4
FOR J = 1 TO N-I
4. Proses berulang untuk membandingkan harga data-data
IF X[J] < X[J+1]
Jika ya, lakukan penggeseran
BANTU = X[J]
X[J] = X[J+1]
X[J+1] = BANTU
5. Cetak hasil
6. Selesai

16

Flowchart prosedur pengurutan data secara urut turun menggunakan metoda


gelembung ditunjukkan pada Gambar 6.4.

Mulai

Baca N,X[I]

FOR I = 1 TO N-1

FOR J = I+1 TO N-1

TIDAK

YA
X[J] < X[J+1]
BANTU=X[I]
X[J]=X[J+1]
X[J+1]=BANTU

NEXT J

NEXT I

Cetak hasil

Selesai

Gambar 6.4: Flowchart prosedur pengurutan data secara urut turun dengan
metoda gelembung

17

6.3. Contoh Penyisipan Langsung (Straight Insertion)

Secara umum proses pengurutan data dengan metoda penyisipan langsung


(straight insertion) merupakan kebalikan dari proses yang dilakukan dalam
metoda seleksi langsung yang telah dibahas pad sub bab 6.1. Dalam metoda
penyisipan langsung, kita hanya akan memperhatikan satu elemen data dari
sumber dan harus memperhatikan semua elemen data dari larik tujuan (one
source multiple destination).

Pengurutan data dengan metoda penyisipan langsung dimulai dengan


membandingkan harga data pada urutan kedua terhadap harga data pertama.
Jika data kedua lebih besar, maka data kedua ditukarkan posisinya dengan data
pertama. Pada langkah berikutnya data pada urutan ketiga dibandingkan dengan
data pada urutan kedua. Jika data ketiga lebih besar, maka data ketiga
ditukarkan posisinya dengan data kedua. Kemudian data tersebut dibandingkan
dengan harga data pertama, tukarkan posisi kedua data jika data ketiga lebih
besar. Berikutnya data ke-4 dibandingkan terhadap data-data urut yang telah
diproses, yaitu data ketiga, kedua, dan pertama. Dalam metoda penyisipan
langsung, proses membandingkan harga data baru (data yang sedang diproses)
terhadap data-data lain yang telah urut akan dihentikan jika data tersebut telah
menempati posisi yang semestinya sehingga data-data yang telah diproses telah
urut.

Untuk memperjelas langkah pengurutan dalam metoda penyisipan langsung,


berikut ini akan diberikan contoh penerapannya. Diketahui sebuah larik data yang
terdiri dari delapan elemen data dalam kondisi tidak urut yaitu sebagai berikut :

10

Langkah pengurutan dan hasil pada setiap langkah pengurutan setiap data yang
diproses dapat ditelusuri sebagaimana ditunjukkan pada Tabel 6.5. Dalam tabel
tersebut, data yang bergaris bawah merupakan data urutan berikutnya yang
harus dibandingkan dan disispkan dalam larik yang telah diurutkan pada langkah
sebelumnya. Perhatikan, bahwa setiap data baru yang sedang diproses akan

18

selalu disisipkan secara langsung dan menempati posisi baru yang sesuai
dengan harganya, sehingga pada setiap akhir langkah tertentu semua data yang
telah diproses akan selalu berada dalam kondisi urut.

Tabel 6.5: Contoh proses pengurutan data secara urut naik dengan metoda
penyisipan langsung
Iterasi Ke:

Hasil Proses

10

10

10

10

10

10

10

10

Hasil akhir yang diperoleh dari proses di atas adalah sekumpulan data dalam
kondisi urut naik, yaitu sebagai berikut :

10

Flowchart prosedur pengurutan data secara urut naik dengan metoda penyisipan
langsung adalah ditunjukkan pada Gambar 6.5.

19

Mulai

Baca N,X[I]

FOR I = 1 TO N-1

T = X[I]
X[0] = T
I=I+1

TIDAK

YA

WHILE T<X[J]

X[J+1] = X[J]
J = J-1
X[J+1] = T

NEXT I

Cetak hasil

Selesai

Gambar 6.5: Flowchart prosedur pengurutan data secara urut naik dengan
metoda penyisipan langsung

Algoritma prosedur pengurutan data secara urut naik dengan metoda penyisipan
langsung dapat dituliskan sebagai berikut :

Masukkan vektor K sebanyak N buah data yang akan diurutkan.


Data-data yang akan diurutkan dibaca sebagai X.

20

1. Mulai
2. Proses berulang langkah-3 s/d langkah-4
FOR I = 1 TO N
3. Tentukan elemen yang akan disisipkan
T = X[I]
X[0] = T
J=I-1
4. Proses berulang untuk menyisipkan harga data-data
WHILE T<X[J]
Jika ya, lakukan penggeseran
X[J+1] = X[J]
J = J -1
X[J+1] = T
5. Cetak hasil
6. Selesai

Jika data dalam contoh di atas akan diurutkan secara urut turun, maka langkah
proses pengurutan di atas tinggal dibalik saja. Prosedur pengurutan data secara
urut turun dengan metoda penyisipan langsung, adalah dimulai dengan
membandingkan harga data pada urutan kedua terhadap harga data pertama.
Jika data kedua lebih besar, maka data kedua ditukarkan posisinya dengan data
pertama. Proses pada langkah berikutnya adalah membandingkan harga data
pada urutan ketiga terhadap harga data kedua. Jika data ketiga lebih kecil, maka
data ketiga ditukarkan posisinya dengan data kedua. Kemudian data tersebut
dibandingkan dengan harga data pertama, tukarkan posisi kedua data jika data
ketiga lebih kecil.

Berikutnya data keempat dibandingkan terhadap data-data urut yang telah


diproses, yaitu data ketiga, kedua, dan pertama. Proses membandingkan harga
data baru (data yang sedang diproses) terhadap data-data lain yang telah urut
akan dihentikan jika data tersebut telah menempati posisi yang semestinya
sehingga data-data yang telah diproses telah urut.

21

Hasil akhir yang diperoleh dari proses di atas adalah sekumpulan data dalam
kondisi urut turun, yaitu sebagai berikut :

10

Langkah pengurutan dan hasil pada setiap langkah pengurutan setiap data yang
diproses dapat ditelusuri sebagaimana ditunjukkan pada Tabel 6.6. Dalam tabel
tersebut, data yang bergaris bawah merupakan data urutan berikutnya yang
harus dibandingkan dan disisipkan dalam larik yang telah diurutkan pada langkah
sebelumnya.

Flowchart prosedur pengurutan data secara urut turun dengan metoda


penyisipan langsung adalah ditunjukkan pada Gambar 6.6. Sedangkan algoritma
prosedurnya dapat dituliskan sebagai berikut ini :

Masukkan vektor K sebanyak N buah data yang akan diurutkan.


Data-data yang akan diurutkan dibaca sebagai X.
1. Mulai
2. Proses berulang langkah-3 s/d langkah-4
FOR I = 1 TO N
3. Tentukan elemen yang akan disisipkan
T = X[I]
X[0] = T
J = I-1
4. Proses berulang untuk menyisipkan harga data-data
While T>X[J]
Jika ya, lakukan penggeseran
X[J+1] = X[J]
J = J -1
X[J+1] = T
5. Cetak hasil
6. Selesai

22

Mulai

Baca N,X[I]

FOR I = 1 TO N-1

T = X[I]
X[0] = T
I=I+1
TIDAK

YA
WHILE T<X[I]
X[J+1] = X[J]
J = J-1
X[J+1] = T

NEXT I

Cetak hasil

Selesai

Gambar 6.6: Flowchart prosedur pengurutan data secara urut turun dengan
metoda penyisipan langsung

23

Tabel 6.6: Contoh proses pengurutan data secara urut turun dengan metoda
penyisipan langsung
Iterasi Ke:

Hasil Proses

10

10

10

10

10

10

10

10

Seperti pada metoda seleksi langsung, metoda ini cukup sederhana, mudah
dipahami dan diterapkan sekalipun tingkat efisiesinya sangat jelek terutama jika
cacah data yang akan diurutkan cukup banyak.

6.4. Metoda Penyisipan Biner (Binary Insertion)

Metoda penyisipan biner (binary insertion) merupakan usaha perbaikan dari


metoda penyisipan langsung (straight inserton). Dalam cacah data yang banyak,
proses pengurutan data dengan metoda penyisipan biner akan lebih efisien jika
dibandingkan dengan metoda penyisipan langsung.

Secara garis besar, proses pengurutan data dengan metoda ini terdiri dari dua
bagian utama, yaitu proses penentuan elemen-elemen data yang akan diproses
dan proses penyisipan elemen data untuk mengurutkan data-data. Proses
penentuan elemen data yang akan diproses adalah sama dengan cara-cara
dalam metoda penyisipan langsung. Berbeda dengan metoda penyisipan
langsung dimana penentuan lokasi dan penyisipan dilakukan secara langsung,
maka dalam metoda penyisipan biner penentuan lokasi dan penyisipan dilakukan

24

dengan metoda biner. Oleh karena itu, metoda ini kemudian disebut sebagai
metoda penyisipan biner.

Langkah proses pengurutan data menggunakan metoda penyisipan biner dapat


dijelaskan sebagai berikut ini. Mula-mula data pertama dalam larik sumbr
dianggap telah menempati posisi yang tepat pada larik hasil. Kemudian setiap
data yang mendapat giliran diproses akan disisipkan ke dalam larik hasil, yaitu
dimulai data kedua, ketiga, hingga data terakhir. Proses penyisipannya dilakukan
dengan tiga tahap, yaitu penentuan lokais untuk penyisipan, kemudian
penggeseran data-data dalam larik hasil yang mempunyai harga lebih besar dari
data yang akan disisipkan, dan terakhir adalah penyisipan data.

Untuk menentukan lokasi penyisipan dengan cara biner adalah dilakukan dengan
cara sebagai berikut ini. Mula-mula kita tetapkan harga-harga batas bawah dan
batas atas interval untuk larik hasil. Harga awal batas bawah untuk setiap iterasi
adalah 1. Sedangkan harga awal batas atas pada setiap iterasi adalah sama
dengan cacah data pada larik hasil. Sebagai contoh, jika saat ini sedang
berlangsung proses penyisipan data ke-10 dari larik sumber, maka harga awal
batas bawahnya adalah 1 dan batas atasnya adalah 9. Selanjutnya dari dua
harga awal tersebut dapat kita tentukan titik tengah intervalnya, yaitu dengan
menjumlahkan harga batas interval bawah dengan batas interval atas dan
kemudian dibagi 2. Titik ini akan membagi larik hasil menjadi dua bagian yang
sama.

Jika data-data akan diurutkan secara urut naik, maka data-data pada bagian
pertama yaitu bagian yang berda di sebelah kiri akan memuat data-data urut
yang lebih kecil dari harga data pada titik tengah interval. Sedangkan data-data
pada bagian kedua yaitu bagian yang berada di sebelah kanan akan memuat
data-data yang lebih besar dari harga data pada titik tengah interval. Setiap data
yang akan disisipkan mula-mula dibandingkan dengan data pda posisi titik
tengah interval. Jika semua data dalam larik sumber tidak ada yang sama, maka
langkah ini akan mengakibatkan dua kemungkinan kondisi, yaitu data yang akan
disisipkan akan lebih kecil atau lebih besar dari harga data pada posisi titik
tengah interval. Jika lebih kecil maka, penyisipan harus dilakukan pada bagian

25

pertama yaitu interval sebelah kiri. Dan kita tidak perlu lagi membandingkannya
dengan data-data pada bagian kedua di sebalah kanan. Namun jika data yang
akan disisipkan lebih besar, maka penyisipan harus dilakukan pada bagian
kedua dan kita tidak perlu lagi membandingkanya dengan bagian pertama.
Dengan

cara

demikian,

maka

kita

dapat

mengurangi

langkah

proses

membandingkan antara data yang akan disisipkan dengan data-data dalam larik
hasil. Faktor inilah yang mampu meningkatkan efisiensi proses pengurutan data
dengan metoda penyisipan biner sehingga dalam cacah data yang cukup banyak
akan lebih baik jika dibandingkan dengan metoda penyisipan langsung.

Untuk melanjutkan ke langkah berikutnya, perlu diperhatikan bahwa jika data


yang disisipkan akan menempati pada bagian pertama, maka batas atas interval
akan digeser menjadi titik tengah dikurangi satu. Sebaliknya jika data yang
disisipkan akan menempati bagian kedua, maka batas bawah interval dinaikan
menjadi titik tengah ditambah satu. Prosedur demikian adalah mengikuti caracara

dalam

metoda

biner

yang

merupakan

salah

satu

dasar

bagi

dikembangkannya metoda penyisipan biner.

Pada langkah selanjutnya, interval dimana data akan disisipkan dibagi kembali
menjadi dua bagian yang sama dengan menetapkan titik tangah pada interval
baru yang lebih sempit tersebut. Kemudian proses perbandingan dan penentuan
interval-interval

baru

dilakukan

kembali.

Demikian

seterusnya

proses

dilaksanakan hingga ditemukan posisi yang tepat bagi data yang akan disisipkan,
yaitu jika harga titik tengah interval telah sama dengan harga batas bawah dan
batas atas interval. Selanjutnya jika posisi penyisipan telah ditemukan, maka
proses dilanjutkan untuk menggeser data-data mulai dari posisi dimana data
akan disisipkan hingga data terakhir pada larik hasil. Setelah selesai baru
kemudian dilakukan penyisipan, yaitu dengan cara menempatkan data yang
disisipkan pada posisi yang telah ditemukan. Dengan demikian sebuah data telah
selesai diproses dan data-data dalam larik hasil tetap berada dalam kondisi urut.
Untuk menyisipkan elemen-elemen data lain yang belum terproses, adalah
dilakukan dengan cara yang sama dengan cara-cara tersebut di atas. Pada
akhirnya jika semua data telah selesai diproses, akan diperoleh sebuah vektor
yang urut secara naik.

26

Untuk memproses yang dilakukan dalam metoda penyisipan biner, berikut ini
akan diberikan sebua contoh penerapannya. Diketahui sebuah vektor K yang
mempunyai delapan elemen data, yaitu sebagai berikut :

Contoh :
10

Dengan menggunakan metoda penyisipan biner, vektor tersebut akan diurutkan


secara urut naik. Secara ringkas, langkah dan hasil proses pengurutan pada
setiap iterasi adalah ditunjukkan pada Tabel 6.7. Data yang mempunyai tanda
garis bawah menunjukkan bahwa data tersebut akan disisipkan pada iterasi
berikutnya. Seperti terlihat dalam tabel tersebut untuk mendapatkan vektor yang
urut naik diperlukan 7 iterasi penyisipan data. Sebagai contoh, hasil proses pada
iterasi pertama akan menyisipkan data 5 dalam posisi pertama. Iterasi kedua
akan menempatkan data 7 pada urutan kedua. Selanjutnya hasill iterasi ketiga
akan menempatkan data 9 pada urutan ketiga. Demikian seterusnya proses
tersebut akan diulangi hingga akhirnya semua data dalam vektor K menjadi urut
secara naik.

Selanjutnya Tabel 6.8. adalah menunjukan langkah-langkah dalam metoda biner


untuk menentukan lokasi untuk penyisipan data yang sedang diproses untuk
contoh di atas. Dalam tabel tersebut, digunakan tiga macam variabel, yaitu I
sebagai pencacah (counter), KIRI untuk mencatat batas bawah interval, KANAN
untuk mencatat batas atas interval, dan TENGAH untuk mencatat titik tengah
interval yang dibatasi oleh KIRI dan KANAN.

27

Tabel 6.7: Contoh proses pengurutan data secara urut naik dengan metoda
penyisipan biner
Iterasi Ke:

Hasil Proses

10

10

10

10

10

10

10

10

Tabel 6.8: Contoh penentuan lokasi penyisipan data secara urut naik dengan
metoda biner
Iterasi ke

Data yg

Kiri

Kanan

tenga

Lokasi

penyisipan

1
1
2
2
3
2
1
3
1
1
3
4
5
4
2
3

1
2
3
1
1
5
3

disisipkan
1
2

2
3

Flowchart

prosedur

5
7
7
9
9
2
2
1
1
1
8
8
8
4
4
4
pengurutan

ditunjukkan pada Gambar 6.7.

1
1
2
1
3
1
1
1
1
1
1
4
5
1
1
3
data

1
2
2
3
3
4
1
5
2
1
5
5
5
7
3
3
dengan

metoda

penyisipan

biner

28

Mulai

Baca N,X[I]

FOR I = 1 TO N-1

SISIP = X[I]
BAWAH = 1
ATAS =I -1

TIDAK

YA

WHILE BAWAH <


ATAS

TENGAH =(BAWAH+ATAS)DIV2

FOR J=I-1
DOWNTO BAWAH
TIDAK

SISIP<X[TENGAH

X[J+1]=X[J]
X[BAWAH]=T

BAWAH=TENGAH

ATAS=TENGAH

NEXT J
NEXT J
Cetak hasil
Selesai

Gambar 6.7: Flowchart prosedur pengurutan data secara urut naik dengan
metoda penyisipan biner

Proses pengurutan data dengan metoda penyisipan biner sebagaimana telah


dijelaskan di atas, dapat dituliskan ke dalam solusi bentuk algoritma prosedur
seperti di bawah ini.

YA

29

Masukan vektor K yang memuat N buah data yang akan diurutkan.


Data-data yang akan diurutkan dibaca sebagai X.
1. Mulai
2. Proses berulang langkah-3 s/d langkah-9
FOR I = 2 TO N
3. Tentukan elemen yang akan disisipkan dan harga awal batas-batas interval
SISIP = X[I], BAWAH = 1, ATAS = I-1
4. Proses berulang langkah-5 s/d langkah-6 untuk mencari lokasi penyisipan
data
WHILE BAWAH <= ATAS
5. Tentukan titik tengah interval
TENGAH = (BAWAH + ATAS) DIV 2
6. Mencari lokasi penyisipan
IF SISIP < X[TENGAH]
Jika ya, tentukan batas interval atas baru : ATAS = TENGAH
Jika tidak, tentukan batas interval bawah baru : BAWAH=TENGAH
7. Proses berulang langkah-8
FOR J = I -1 DOWNTO BAWAH
8. Menggeser data-data
X[J+1] = X[J]
9. Sisipkan data
X[BAWAH] = T
10. Selesai

6.5. Metoda Quick Sort (Partition Exchange Sort)

Metoda Quick Sort (Partition Exchange Sort) pertama kali diperkenalkan oleh
C.A.R. Hoare. Proses pengurutan data menggunakan metoda ini secara garis
besar adalah sebagai berikut ini. Apabila diketahui sebuah vektor K dengan N
buah elemen data yang akan diurutkan secara urut naik. Pertama-tama dipilih
salah satu elemen data sembarang pada vektor K tersebut, biasanya adalah
elemen pada urutan pertama dan kita beri nama X. Selanjutnya semua elemen

30

pada vektor K disusun dengan menempatkan elemen data X pada posisi tertentu
yaitu J sedemikian rupa sehingga elemen data pada urutan ke-1 sampai ke j-1
mempunyai harga lebih besar dari X. Sehingga, dengan demikian akan terdapat
dua subvektor, yaitu subvektor bagian pertama yang memuat elemen-elemen
data yang memilki harga kurang dari X dan subvektor bagian kedua yang
memuat elemen-elemen data yang memilki harga lebih dari X.

Prosedur di atas akan diulang pada subvektor pertama dan subvektor kedua,
sehingga akan diperoleh empat bagian subvektor baru. Proses yang sama akan
terus dilakukan secara berulang hingga semua subvektor pada akhirnya hanya
tinggal mempunyai satu elemen data. Dalam kondisi demikian, maka semua data
dalam vektor K telah menjadi urut naik.

Secara lebih terinci, prosedur pengurutan data dengan menggunakan metoda


quick sort dapat terdiri serangkaian langkah yang dapat dituliskan dalam solusi
bentuk algoritma sebagai berikut ini.

Masukan vektor K yang memuat N buah data yang akan diurutkan.


Data-data yang akan diurutkan dibaca sebagai X.
1. Mulai
2. Cek pencacah data
IF AWAL < AKHIR
Jika ya, kerjakan langkah-3 s/d langkah-10
Jika tidak, kerjakan langkah-11
3. Tentukan harga awal
I = AWAL +1
J = AKHIR
4. Menentukan posisi data X dengan gerakan dari kiri ke kanan
WHILE X[I] < X[AWAL]
I = I+1
5. Menentukan posisi data X dengan gerakan dari kanan ke kiri
WHILE X[J] > X[AWAL]
J = J-1
6. Proses berulang langkah-7 s/d langkah-9

31

while i<j
7. Tukarkan nilai X[I] dengan X[J]
BANTU = X[J]
X[J] =X[I]
X[I] = BANTU
8. Bergerak dari kiri ke kanan
WHILE X[I] < X[AWAL]
I = I+1
9. Bergerak dari kanan ke kiri
WHILE X[J] > X[AWAL]
J = J -1
10. Tukarkan X[AWAL] dengan X[J]
BANTU = X[J]
X[J] = X[AWAL]
X[AWAL] = BANTU
11. Cetak hasil
12. Selesai

Sebagai ilustrasi tentang proses pengurutan data secara urut naik dengan
metoda quick sort, berikut ini akan diberikan contoh penerapannya. Diketahui
suatu vektor K yang mempunyai delapan elemen data, yaitu sebagai berikut :
Contoh :
87

74

71

100

75

25

56

90

Proses pengurutan data dalam vektor K di atas dimulai dengan menempatkan


data urutan pertama yaitu 87 pada posisi tertentu yaitu J, sehingga titik J akan
membagi vektor K menjadi dua subvektor baru yaitu subvektor di sebelah kiri
yang hanya memuat data-data yang lebih kecil atau sama dengan 87. Subvektor
kedua yaitu subvektor di sebelah kanan hanya memuat data-data yang
mempunyai harga lebih besar dari 87. Dengan demikian, data 87 akan
ditempatkan pada urutan ke-6. Hasil dari proses pada langkah pertama tersebut
di atas selengkapnya adalah sebagai berikut :

74

71

75

25

56

87

100

90

32

Langkah berikutnya, elemen pertama pada subvektor kiri yaitu 74 dibandingkan


dengan elemen data pada urutan kedua, ketiga, keempat, serta kelima pada
subvektor kiri. Dengan demikian 74 akan menempati urutan ke-4 dan akan
membagi subvektor kiri menjadi dua subvektor baru, dimana subvektor pertama
akan berada di sebelah kiri yang hanya akan memuat data-data yang lebih kecil
atau sama dengan 74 dan subvektor kedua akan berada disebelah kanan yang
hanya akan memuat data-data yang lebih besar dari 74.

Pada saat yang bersamaan data-data pada subvektor kanan juga dikenakan
perlakuan yang sama. Data pertama pada subvektor kanan yaitu 100 akan
dibandingkan dengan semua data dalam subvektor kanan, sehingga akan
membentuk dua subvektor baru. Berhubung cacah elemen pada subvektor
kanan hanya memiliki dua elemen data, maka subvektor baru yang terbentuk
akan menempatkan elemen 90 pada urutan lebih awal dan elemen 100 pada
urutan berikutnya. Akhir proses pada langkah ini akan memberikan hasil sebagai
berikut :

71

25

56

74

75

87

90

100

Langkah selanjutnya, elemen pertama pada subvektor kiri yaitu 71 akan


dibandingkan dengan elemen data 25 dan 56 pada subvektor bagian kiri.
Akhirnya subvektor kiri akan terbagi menjadi dua subvektor baru, dimana data 71
akan menempati urutan ke-3. Sedangkan masing - masing subvektor kanan
tinggal memiliki sebuah elemen data, sehingga tidak perlu diproses kembali.
Akhir proses pada langkah ini akan memberikan hasil sebagai berikut :
25

56

71

74

75

87

90

100

Dengan mengulang proses yang sama seperti diatas, maka pada akhirnya akan
diperoleh suatu vektor baru dalam kondisi urut secara naik, yaitu sebagai berikut
ini :
25

56

71

74

75

87

90

100

Flowchart prosedur pengurutan data secara urut naik dengan metoda Quick
Sort adalah ditunjukkan pada Gambar 6.8

33

Mulai
Baca N,X[I]
TIDAK

YA
IF AWAL<AKHIR
I=AWAL+1,J=AKHIR

TIDAK

YA

WHILE X[I]<X[AWAL]

I = I+1

TIDAK

YA

WHILE X[J]>X[AWAL]

J = J+1
TIDAK

YA
WHILE I<J
BANTU=X[J],X[J]=X[I ],X[I]=BANTU

TIDAK

YA

WHILE X[J]<X[AWAL]

I = I+1

TIDAK

YA
WHILE X[J]>X[AWAL]
J = J+1

BANTU=X[J],X[J]=X[AWAL],X[AWAL]=BANTU
Cetak hasil
Selesai

Gambar 6.8: Flowchart prosedur pengurutan data secara urut naik dengan
metoda Quick Sort

34

6.6.Metoda Shell Short (Diminishing Increment)

Metoda Shell sort (diminishing increment) pertama kali dikenalkan pada tahun
1959 oleh Donald L.Shell. Proses pengurutan data dengan metoda ini secara
ringkas dapat dijelaskan sebagai berikut ini. Untuk mengurutkan sebuah vektor
yang terdiri dari N elemen data secara urut naik, mula-mula data pada urutan
pertama dibandingkan dengan data pada jarak tertentu dari data pertama
tersebut, misal N/6 atau N-5, N-4, N-3, N-2, atau N-1. Jika data pertama lebih
besar, maka posisi data saling ditukarkan. Berikutnya, data pada urutan kedua
dibandingkan dengan data pada jarak yang sama sebagaimana dilakukan pada
data pertama. Lakukan pertukaran data jika diperlukan. Demikian seterusnya
proses perbandingan dan pertukaran data dilakukan hingga data pada urutan
terakhir (=N) selesai diproses.

Pada langkah kedua, proses perbandingan dan pertukaran data seperti diatas
diulang kembali dengan jarak yang lebih kecil. Demikian juga untuk langkahlangkah ketiga, keempat, kelima, dan seterusnya hingga terakhir, proses
perbandingan dan pertukaran, (jika diperlukan) akan terus dilakukan dengan
jarak yang semakin diperkecil. Proses akan dihentikan hingga jarak untuk
membandingkan antara data sama dengan satu. Dalam kondisi demikian ini,
maka semua data dalam vektor N telah menjadi urut naik.

Dalam metoda Shell sort ini tidak ada ketentuan yang baku tentang seberapa
jauh jarak yang harus ditetapkan pada saat pertama kali untuk perbandingan
antar data yang kemudian akan dipersempit pada langkah-langkah selanjutnya.
Semakin jauh jarak perbandingan yang digunakan pertama kali akan
mengakibatkan semakin banyak proses perbandingan dan pertukaran antar data
yang harus dilakukan. Hal ini berarti proses pengurutan data akan menjadi tidak
efisien. Sehingga, jika kita mengharapkan efisiensi yang tinggi tentu kita akan
menggunakan jarak yang relatif kecil secara langsung pada langkah pertama.
Tetapi, cara yang seperti ini sungguh tidak dapat menjamin keakuratan pada
hasil operasi. Dengan menetapkan jarak perbandingan sama dengan separuh
dari cacah data keseluruhan (=N/2) untuk langkah pertama, kemudian N/2-1,

35

N/2-2, N/2-3, dan seterusnya pada langkah-langkah berikutnya, pada umumnya


akan memberikan efisiensi yang cukup baik. Namun celakanya, cara ini masih
akan mengakibatkan kemungkinan terjadinya kesalahan pada hasil operasinya.

Metoda ini akan paling aman digunakan jika jarak yang digunakan pada langkah
pertama adalah N-1, dimana N adalah cacah data keseluruhan. Kemudian jarak
pada langkah kedua adalah N-2, pada langkah ketiga adalah N-3, dan
seterusnya hingga proses berakhir. Sekali lagi cara ini akan relatif aman dan
hasilnya dapat dijamin keakuratannya. Tetapi kita tahu bahwa cara seperti ini
sama sekali tidak efisien.

Untuk memperjelas tentang prosedur pengurutan data secara urut naik dengan
metoda Shell sort, berikut ini akan diberikan contoh penerapannya. Diketahui
sebuah vektor yaitu K yang memiliki delapan elemen data dalam kondisi acak
yaitu sebagai berikut :
Contoh :
90

15

95

30

35

100

12

25

Jika jarak untuk melakukan perbandingan pada langkah pertama adalah N-1 atau
sama dengan 7, maka jarak perbandingan pada langkah kedua adalah 6, jarak
pada langkah ketiga adalah 5, dan pada langkah-langkah berikutnya akan terus
dikurangi satu hingga akhirnya sama dengan satu. Secara terinci, proses
pengurutan data dengan metoda Shell sort untuk vektor K adalah seperti
ditunjukan dalam Tabel 6.9. Tanda garis bawah adalah menunjukan posisi awal
data yang akan saling dibandingkan pada langkah selanjutnya.

Berdasarkan keterangan dalam tabel tersebut, maka untuk mendapatkan data


yang urut diperlukan 7 langkah, hal ini karena jarak awal yang digunakan adalah
7. Hasil akhir yang diperoleh adalah vektor baru dalam kondisi urut naik, yaitu :
12

15

25

30

35

90

95

100

Flowchart prosedur pengurutan data secara urut naik dengan metoda Shell sort
ditunjukkan pada Gambar 6.9.

36

Tabel 6.9. Contoh pengurutan data secara urut naik denga metoda Shell sort
Iterasi ke

Jarak

Hasil proses

90

15

95

30

35

100

12

25

25

15

95

30

35

100

12

90

12

15

95

30

35

100

25

90

12

15

90

30

35

100

25

95

12

15

25

30

35

100

90

95

12

15

25

30

35

95

90

100

12

15

25

30

35

95

90

100

12

15

25

30

35

95

90

100

Algoritma prosedur pengurutan data secara urut naik dengan metoda Shell sort
dapat dituliskan seperti di bawah ini.

Masukan vektor K yang memuat N buah data yang akan diurutkan.


Data-data yang akan diurutkan dibaca sebagai X.
1. Mulai
2. Tentukan harga awal jarak perbandingan data.
JARAK = N-1
3. Proses berulang langkah-4 s/d langkah-7
while jarak >= 1
4. Proses berulang langkah-5 s/d langkah-6 untuk mengurutkan data
FOR I = 1 TO N-JARAK
5. Tentukan
J = I + JARAK
6. Bandingkan antar data
IF X[I] > X[J]
Jika ya, tukarkan posisi kedua data
BANTU = X[I]
X[I] = X[J]
X[J] = BANTU
7. Tentukan jarak baru untuk langkah berikutnya

37

JARAK = JARAK-1
8. Cetak hasil
9. Selesai

Mulai
Baca N,X[I]
JARAK = N-1
TIDAK

YA
WHILE JARAK >= 1
FOR I=1 TO N-JARAK

J = 1 TO JARAK
TIDAK

YA

X[I] > X[J]

BANTU = X[I]
X[I] = X[J]
X[J] = BANTU

NEXT I

JARAK = JARAK - 1

Cetak hasil

Selesai

Gambar 6.9 : Flowchart prosedur pengurutan data secara urut naik dengan
metoda Shell sort

38

Algoritma prosedur pengurutan data secara urut naik dengan metoda Shell sort
dapat dituliskan seperti di bawah ini.

Masukan vektor K yang memuat N buah data yang akan diurutkan.


Data-data yang akan diurutkan dibaca sebagai X.
10. Mulai
11. Tentukan harga awal jarak perbandingan data.
JARAK = N-1
12. Proses berulang langkah-4 s/d langkah-7
while jarak >= 1
13. Proses berulang langkah-5 s/d langkah-6 untuk mengurutkan data
FOR I = 1 TO N-JARAK
14. Tentukan
J = I + JARAK
15. Bandingkan antar data
IF X[I] > X[J]
Jika ya, tukarkan posisi kedua data
BANTU = X[I]
X[I] = X[J]
X[J] = BANTU
16. Tentukan jarak baru untuk langkah berikutnya
JARAK = JARAK-1
17. Cetak hasil
18. Selesai

6.7. Metoda Merge Sort (Two-Way Merge Sort)

Metoda merge sort juga disebut two way merge sort. Langkah-langkah
pengurutan dengan merge sort secara garis besar dapat dijelaskan sebagai
berikut ini. Andaikan terdapat sebuah vektor K dengan cacah elemen data
sebanyak N dalam kondisi tidak urut. Untuk mengurutkan semua data dalam K,
mula-mula setiap elemen dalam vektor K dianggap sebagai sebuah vektor yang
masing-masing mempunyai sebuah elemen data. Dengan demikian akan

39

terdapat N vektor dengan cacah elemen masing-masing adalah 1 buah.


Selanjutnya setiap pasang vektor yang berurutan kita gabungkan menjadi
sebuah vektor baru. Jika kita menginginkan hasil secara urut naik, maka pada
saat menggabungkan kedua vektor tersebut sekaligus dilakukan perbandingan
dan pertukaran posisi antar elemen data sedemikian rupa sehingga data yang
lebih kecil akan ditempatkan pada posisi yang mendahului data lain yang lebih
besar. Pada akhir langkah pertama ini, kita akan memiliki vektor baru sebanyak
N/2 yang masing-masing dalam kondisi urut naik. Cacah elemen pada masingmasing vektor adalah 2 buah, kecuali jika N bernilai ganjil maka akan terdapat
N/2+1 vektor baru dimana salah satu vektor hanya memiliki sebuah elemen data
saja.

Pada langkah selanjutnya, setiap pasang vektor yang berurutan dilakukan


penggabungan dan sekaligus dapat pertukaran posisi antar data sehingga akan
terbentuk vektor-vektor baru. Demikian, proses penggabungan dan pertukaran
posisi data secara terus-menerus akan dilkukan sehingga pada akhirnya akan
diperoleh sebuah vektor baru yang memuat semua elemen data dalam vektor
sumber dalam kondisi urut naik.

Sebagai ilustrasi untuk memperjelas proses pengurutan dalam metoda merge


sort, maka berikut ini akan diberikan contoh penerapannya. Diketahui sebuah
vektor yang akan diurutkan secara urut naik, yaitu K yang memiliki delapan
elemen data sebagai berikut :

Contoh :
87

74

71

100

75

25

56

90

ilustrasi proses pengurutan vektor K dengan metoda merge sort secara ringkas
adalah ditunjukkan Gambar 6.10.

40

Langkah-1:

87

74

71

100

75

25

56

90

N=1

Langkah-2:

74

80

71

100

25

75

56

90

N=2

Langkah-3:

71

74

80

100

25

56

75

90

N=3

Langkah-4:

25

56

71

74

75

80

90

100

N=4

Gambar 6.10: Contoh ilustrasi pengurutan data dengan metoda merge sort

Dalam contoh di atas, mula-mula vektor K akan dipecah menjadi vektor-vektor


baru yang masing-masing memiliki satu elemen data, sehingga akan terdapat
delapan vektor. Pada langkah pertama, setiap pasang vektor yang berurutan
akan digabungkan dan sekaligus dibandingkan untuk menempatkan data yang
lebih kecil pada lokasi yang lebih awal. Dalam contoh di atas 87 akan
digabungkan dengan 74, 71 dengan 100, 75 dengan 25, dan 56 dengan 90.
Dengan demikian langkah pertama akan menghasilkan empat vektor baru yang
masing-masing telah urut. Langkah ketiga akan menggabungkan kembali
sekaligus mengatur lokasi setiap data yang digabungkan tersebut sehingga
akhirnya akan menghasilkan dua vektor baru. Pada langkah terakhir, yaitu
langkah keempat, maka dua vektor hasil penggabungan pada langkah ketiga
akan digabungkan dan diatur kembali, sehingga akhirnya akan diperoleh vektor
baru yang urut secara naik, yaitu :

25

56

71

74

75

87

90

100

Dari ilustrasi di atas terlihat bahwa untuk mengurutkan vektor KK yang memiliki
delapan elemen data akan memerlukan 3 langkah penggabungan dimana
masing-masing langkah terdiri dari beberapa proses perbandingan dan
pertukaran lokasi elemen data.

Selanjutnya, untuk menuliskan solusi bentuk algoritma prosedur pengurutan data


secara urut naik dengan metoda merge sort akan digunakan beberapa variabel I,
J, K, dan L, adalah sebagai pencacah pada proses perulangan. Variabel N
adalah menunjukkan cacah elemen vektor sumber KK. Variabel ITERASI
menyatakan banyaknya langkah yang harus dilakukan untuk mengurutkan data.

41

SUB ITERASI adalah variabel untuk menentukan banyaknya sub iterasi pada
setiap iterasi. Variabel UKURAN menunjukkan cacah elemen vektor pada iterasi
yang bersesuaian. Sedangkan R, S dan T adalah variabel-variabel yang akan
digunakan sebagai pencacah. Untuk memperoleh vektor yang urut maka cacah
iterasi yang harus dilakukan adalah sebanyak M dimana sama dengan log2N.
Algoritma prosedur pengurutan data dengan metoda merge sort dapat dituliskan
sebagai berikut ini :

Masukan vektor K yang memuat N buah data yang akan diurutkan.


KK adalah vektor hasil dalam kondisi urut naik.
1. Mulai
2. Proses berulang langkah-3 s/d langkah-8
FOR ITERASI = 1 TO M
3. Inisialisasikan untuk iterasi
UKURAN = 2..(ITERASI-1)
P=1
Q = P + UKURAN
SUB ITERASI = N/(2x ITERASI)
4. Proses berulang langkah-5 s/d langkah-8 untuk setiap iterasi
FOR S = 1 TO SUB ITERASI
5. Inisialisasi prosedur simple merge
I=P
J=Q
T=P
6. Proses berulang untuk membandingkan antar data dan menemukan elemen
terkecil
WHILE ((I+1-P <= UKURAN) AND (J+1-Q <= UKURAN))
IF ITETRASI = GANJIL
Jika ya, IF K[I] <= K[J]
Jika ya, tentukan KK[T] = K[I]
I=I+1
T=T+1
Jika tidak, tentukan KK[T] = K[J]
J=J+1

42

T=T+1
Jika tidak, IF KK[I] <= KK[J]
Jika ya, tentukan K[T] = KK[I]
I=I+1
T=T+1
Jika tidak, tentukan K[T] = KK[J]
J=J+1
T=T+1
7. Copikan sisa elemen data yang tidak terproses dari vektor sumber ke vektor
hasil
IF I + 1 P > UKURAN
Jika ya, IF ITERASI = Ganjil
Jika ya, lakukan proses berulang
FOR R = J TO Q + UKURAN-1
KK[T] = K[R]
T=T+1
Jika tidak, lakukan proses berulang
FOR R = J TO Q + UKURAN 1
K[T] = KK[R]
T=T+1
Jika tidak, IF ITERASI = Ganjil
Jika ya, lakukan proses berulang
FOR R = I TO P + UKURAN 1
KK[I] = K[R]
T = T +1
Jika tidak, lakukan proses berulang
FOR R = I TO P + UKURAN 1
K[T] = KK[R]
T=T+1
8. Perbaharui indikasi vektor
P = Q + UKURAN
Q = P + UKURAN
9. Copikan ulang jika diperlukan
IF M = Ganjil

43

Jika ya, lakukan proses berulang


FOR I = 1 TO N
K[I] = KK[I]
10. Cetak hasil
11. Selesai

Proses dalam algoritma di atas dapat dijelaskan sebagai berikut ini. Langkah ke1 adalah titik mulai proses dimana data yang akan diurutkan diasumsikan telah
dibaca sebelumnya. Langkah ke-2 memeriksa cacah iterasi yang diperlukan
dalam pengurutan data. Langkah ke-3 memeriksa cacah masing-masing vektor
baru (=UKURAN) yang digunakan dalam sub iterasi untuk melakukan proses
penggabungan. Langkah ini juga menghitung cacah prosedur penggabungan
(=SUB ITERASI) yang diperlukan dalam satu kali iterasi. Selain itu, inisialisasi
variabel K dan L dilakukan untuk menyimpan jejak vektor yang digabungkan
pada setiap sub iterasi ditetapkan dalam langkah ini. Langkah ke-4 adalah
memeriksa cacah sub iterasi yang diperlukan pada setiap iterasi. Langkah ke-5
adalah menginisialisasikan variabel-variabel I, J, dan T yang akan digunakan
sebagai indeks vektor yang akan digabungkan. Langkah ke-6 hingga langkah ke8 merupakan prosedur untuk melakukan penggabungan. Dalam langkah ini, jika
variabel ITERASI mempunyai nilai ganjil maka outputnya akan disimpan dalam
vektor C. Namun jika bernilai genap, maka outputnya akan disimpan dalam
vektor KK yaitu vektor hasil. Langkah ke-9 adalah menentukan daerah vektor
yang telah terurut / tersortir. Jika cacah ITERASI yang diperlukan dalam
menyortir vektor adalah ganjil, maka outputnya akan meliputi semua elemen data
yang telah terproses. Dalam kasus ini, maka elemen-elemen data dalam vektor
C akan dicopikan ke dalam vektor KK.

Metoda ini cukup efisien untuk diterapkan. Untuk cacah iterasi sebanyak M =
Log2N, maka total perbandingan yang harus dilakukan adalah sebanyak
NxLog2N kali. Kelemahan metoda ini adalah daerah output akan memerlukan
tempat yang sama ukuranya dengan vektor sumber. Algoritma prosedur merge
sort sebagaimana dituliskan di atas hanya diutamakan pada vektor dengan
cacah elemen N=2M. Tentunya algoritma prosedur tersebut dapat dimodifikasi
agar dapat mengatasi semua kasus pengurutan data secara umum.

44

6.8. Metoda Radix Sort

Metoda pengurutan dengan Radix Sort hanya ditujukan untuk pengurutan data
yang bertipe numerik saja. Dalam metoda Radix Sort proses pengurutan
didasarkan pada harga sesungguhnya dari suatu digit pada bilangan-bilangan
yang hendak diurutkan. Dalam basis sistem bilangan desimal, maka digit-digit
suatu bilangan dapat dikelompokkan menjadi 10 kelompok, yaitu kelompok 0,
1, 2, 3, 4, 5, 6, 7, 8, dan 9. Dengan demikian harga suatu bilangan
dapat diidentifikasi ke dalam kelompok-kelompok digit tersebut.

Sebagai contoh pada bilangan 5426 angka 6 menempati pada digit satuan,
angka 2 menempati pada digit puluhan, angka 4 menempati pada digit
ratusan, dan angka 5 menempati pada digit ribuan. Untuk mengurutkan datadata bertipe numerik, maka dapat dilakukan dengan cara membandingkan setiap
digit yang bersesuaian terhadap bilangan yang lain.

Pengurutan

data

dengan

metoda

Radix

Sort

dilakukan

dengan

cara

membandingkan setiap digit bilangan yang akan diurutkan mulai dari digit paling
kiri yaitu digit yang mempunyai harga paling besar. Jika harganya sama maka
kemudian perlu dibandingkan kembali digit pada posisi di sebelah kanannya
hingga digit yang terakhir yaitu digit yang ditulis paling kanan. Pada saat dijumpai
adanya perbedaan nilai pada digit yang sama, maka kita dapat menentukan
bahwa suatu bilangan adalah lebih besar atau lebih kecil berdasarkn harganya.
Sebagai contoh, data 6425 adalah lebih besar dari 5425, karena harga pada digit
pertama (dari kiri), yaitu 6 lebih besar dari 5.

Dalam contoh yang lain, 7254 adalah lebih kecil dari 7264. Jika dibandingkan,
digit 7 pada kedua bilangan tersebut mempunyai harga yang sama, sehingga kita
harus membandingkan harga pada digit sebelah kanannya. Digit kedua pada
7254, nilainya sama dengan digit kedua pada 7264, yaitu sama-sama memiliki
angka 2. Ini berarti kita harus membandingkan kembali digit sebelah kanannya.
Ketika kita membandingkan kembali, yaitu 5 pada 7254 dan digit 6 pada angka
7264, maka digit 6 lebih besar daripada 5. Sehingga dapat disimpulkan bahwa
7254 lebih kecil daripada 7264.

45

Dalam metoda Radix sort, setiap data yang akan diurutkan perlu dipisahkan ke
dalam sejumlah digit sesuai kelompok-kelompoknya. Pengelompokan dimulai
pada digit paling kiri yaitu digit terbesar dan kemudian diikuti oleh digit berikutnya
yang lebih kecil hingga pada digit satuan yang menempati posisi paling kanan.
Untuk

keperluan

pengelompokan

tersebut,

jika

diperlukan

kita

dapat

menambahkan digit 0 untuk menyamakan panjang digit semua data yang akan
diurutkan.