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
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.
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.
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 :
yang
akan
diurutkan.
Sedangkan
variabel
LOKASI
dan
BANTU
Solusi dalam bentuk algoritma untuk mengurutkan data secara urut turun dengan
metoda seleksi langsung dapat dituliskan sebagai berikut :
Mulai
Baca N, X
FOR I = 1 TO N-1
LOKASI = J
FOR J = I+1 TO N
TIDAK
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
( N I ) N ( N 1) N 2 N
=
2
2
I =1 =
N 1
K =
Keterangan:
: 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.
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.
semua
data
dengan
metoda
gelembung,
maka
K=
N2 N
2
Dimana ,
K
: cacah data
cacah
12
Mulai
Baca N, [I]
FOR 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
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
Solusi dalam bentuk algoritma untuk mengurutkan data secara urut naik dengan
metoda gelembung dapat dituliskan sebagai berikut :
14
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
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 :
16
Mulai
Baca N,X[I]
FOR 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
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 :
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.
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.
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.
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.
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.
dalam
metoda
biner
yang
merupakan
salah
satu
dasar
bagi
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
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
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
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
YA
29
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.
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
74
71
75
25
56
87
100
90
32
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
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
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
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.
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.
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
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.
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
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
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.
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 :
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
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
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.