Anda di halaman 1dari 22

BAB X

PENGURUTAN DAN PENCARIAN DATA

10.1 Tujuan Instruksional Khusus (TIK)

Setelah Menyelesaikan bab ini mahasiswa dapat :

1) Memilih teknik sorting mana yang sesuai serta dapat menggunakan teknik searching dalam
mencari elemen pada suatu data.
2) Mengenal jenis-jenis metode sorting dan searching, serta mampu menerapkannya didalam
sebuah program sederhana.

10.2 Pendahuluan

Sorting dan searching merupakan salah satu operasi dasar dalam ilmu komputer. Sorting
merupakan suatu proses (operasi) yang mengurutkan data dalam suatu urutan yang diberikan
(increasing atau decreasing). Searching merupakan suatu proses (operasi) untuk mencari lokasi
dari data yang diberikan dalam suatu urutan data.

Secara tidak langsung sorting dan searching menunjuk pada operasi file yang merupakan
kumpulan suatu dari record. Masing-masing record dalam file F dapat berisi banyak field, tetapi
terdapat 1 buah field yang memiliki nilai unique atau merupakan key yang unique dalam record
tersebut. Misal field K merupakan key unique yang disebut primary key, maka proses sorting file
F akan berdasarkan key unique tersebut dan proses searching untuk mencari record tertentu
berdasarkan nilai key unique yang diberikan.

10.2.1 Pengurutan (Sorting)


Terdapat 2 katagori dasar dalam tehnik sorting : internal sort dan external sort. Metoda
Internal sort digunakan apabila koleksi data yang akan diurutkan tidak dalam jumlah besar
sehingga proses dapat dilakukan dalam main memory. Metoda External sort digunakan apabila
koleksi data yang akan diurutkan dalam jumlah besar dimana koleksi data tersebut ada dalam
auxiliary memory device seperti magnetic tape atau disk.

Pengurutan & Pencarian Data 100


(Yang akan di bahas adalah Internal Sort).

Misal A merupakan suatu daftar dari n elemen A1, A2, ..., An dalam memori. Sorting A
merupakan operasi yang mengatur elemen dalam A sehingga ada dalam urutan yang terurut, misal
dalam increasing order sehingga :

A1 £ A2 £ A3 £ ..... £ An

Contoh :

Misal suatu array DATA berisi 8 elemen sebagai berikut :

DATA : 77, 33, 44, 11, 88, 22, 66, 55

Setelah diurutkan :

DATA : 11, 22, 33, 44, 55, 66, 77, 88

a. Insertion Sort
Misal array A dengan n elemen A[1], A[2], ..... , A[N] dalam memori. Algoritma Insertion Sort
memeriksa A dari A[1] sampai dengan A[N], menyisipkan setiap elemen A[K] ke dalam posisi
yang seharusnya dalam subarray terurut A[1], A[2], ..... , A[K-1].

Algoritma sorting ini umumnya digunakan apabila jumlah elemennya sedikit (n kecil). Masalah
yang akan muncul dengan metoda ini adalah bagaimana cara menyisipkan A[K] ke dalam letak
yang seharusnya pada subarray terurut A[1], A[2], ....., A[K-1]. Hal ini dapat dilakukan dengan
membandingkan A[K] dengan A[K-1], kemudian A[K] dengan A[K-2], A[K] dengan A[K-3] dan
seterusnya, sampai menemukan elemen A[J] dimana A[J] £ A[K].

Algoritma ini menggunakan sentinel elemen (A[0]) yang digunakan sebagai perbandingan. Yang
dimaksud dengan sentinel elemen adalah elemen yang memiliki nilai yang sangat kecil.

Pengurutan & Pencarian Data 101


Tabel 10.1 Penggambaran proses Insertion Sort

Proses A[0] A[1] A[2] A[3] A[4] A[5] A[6] A[7] A[8]

K = 1: -¥ 77 33 44 11 88 22 66 55

K = 2: -¥ 77 33 44 11 88 22 66 55

K = 3: -¥ 33 77 44 11 88 22 66 55

K = 4: -¥ 33 44 77 11 88 22 66 55

K = 5: -¥ 11 33 44 77 88 22 66 55

K = 6: -¥ 11 33 44 77 88 22 66 55

K = 7: -¥ 11 22 33 44 77 88 66 55

K = 8: -¥ 11 22 33 44 66 77 88 55

Urutan : -¥ 11 22 33 44 55 66 77 88

Contoh :

Array A dengan 8 elemen sebagai berikut :

77, 33, 44, 11, 88, 22, 66, 55

Tabel 10.1 menggambarkan algoritma insertion sort. Elemen yang dilingkari menandakan A[K]
dalam masing-masing proses dari algoritma, dan tanda panah menandakan letak yang seharusnya
untuk menyisipkan A[K].

Algoritma Insertion Sort :

1. A[0] = 0 {sentinel elemen}

2. Repeat langkah 3 sampai 5 untuk K = 2,3,.....,N

3. Temp := A[K] ; PTR = K - 1

4. Repeat While Temp < A[PTR]

a. A[PTR+1] = A[PTR]

b. PTR = PTR - 1

Pengurutan & Pencarian Data 102


[End Of Loop]

5. A[PTR+1] = Temp

[End Loop Langkah 2]

6. Return

Complexity Insertion Sort = O(n2)

b. Selection Sort
Array A dengan n elemen A[1], A[2], ....., A[N] dalam memori. Algoritma untuk mengurutkan A
sebagai berikut : Pertama, cari elemen terkecil dalam array A dan letakkan pada posisi pertama
dalam array tersebut. Kemudian cari elemen kedua terkecil dalam array A dan letakkan dalam
posisi kedua dari array tersebut, dan begitu seterusnya.

Proses 1 : Cari lokasi LOC yang merupakan elemen terkecil dalam array yang

terdiri dari N elemen , A[1], A[2], ...., A[N] dan kemudian tukar posisi

A[LOC] dengan A[1].

Proses 2 : Cari lokasi LOC yang merupakan elemen terkecil dalam array yang

terdiri dari N-1 elemen , A[2], A[3], ...., A[N] dan tukar posisi A[LOC]

dengan A[2]. A[1] , A[2] terurut, jika dan hanya jika A[1] £ A[2].

Proses 3 : Cari lokasi LOC yang merupakan elemen terkecil dalam array yang

terdiri dari N-2 elemen, A[3], A[4],......, A[N] dan tukar posisi A[LOC]

dengan A[3]. A[1], A[2], A[3] terurut, jika dan hanya jika A[2] £ A[3].

Dst.................

Sehingga A akan terurut setelah N-1 proses.

Contoh ;

Array A dengan 8 elemen sbb :

77, 33, 44, 11, 88, 22, 66, 55

Pengurutan & Pencarian Data 103


Proses algoritma digambarkan dalam Tabel 1.2. Misalkan LOC berisi nilai lokasi elemen terkecil
A[K], A[K+1],...,A[N] selama proses K. Elemen yang dilingkari merupakan elemen yang akan
ditukar posisinya.

Tabel 10.2 Penggambaran proses Selection Sort


Proses A[1] A[2] A[3] A[4] A[5] A[6] A[7] A[8]

K = 1 ; LOC = 4 77 33 44 11 88 22 66 55

K = 2 ; LOC = 6 11 33 44 77 88 22 66 55

K = 3 ; LOC = 6 11 22 44 77 88 33 66 55

K = 4 ; LOC = 6 11 22 33 77 88 44 66 55

K = 5 ; LOC = 8 11 22 33 44 88 77 66 55

K = 6 ; LOC = 7 11 22 33 44 55 77 66 88

K = 7 ; LOC = 7 11 22 33 44 55 66 77 88

Urutan : 11 22 33 44 55 66 77 88

Algoritma :

Procedure SELECTION (A, N)

1. Repeat langkah 2 dan 3 untuk K = 1,2,.....,N-1


2. Call MIN(A, K, N, LOC)
3. Temp = A[K] ; A[K] = A[LOC] ; A[LOC] = Temp
[End Loop langkah 1]
4. Exit

Procedure MIN (A,K,N,LOC)

1. Min = A[K] ; LOC = K


2. Repeat For J = K+1, K+2, ......, N
If Min > A[J] Then Min = A[J] ; LOC = A[J] ; LOC = J
[End Loop]
3. Return

Pengurutan & Pencarian Data 104


Complexity (kompleksitas) algoritma Selection Sort : O(n2)

c. Merging
Misal A merupakan himpunan data terurut dengan r buah elemen dan B himpunan data terurut
dengan s buah elemen. Proses yang menggabungkan elemen-elemen dalam A dan B menjadi
himpunan elemen data terurut tunggal, misal C dengan n = r + s buah elemen disebut dengan
proses Merging.

Secara singkat, proses Merging dapat dijelaskan sebagai berikut ; ambil elemen pertama dari A,
A[1] dan B, B[1]. Bandingkan kedua elemen tersebut. Jika A[1] > B[1], B[1] dimasukkan dalam
C, jika tidak A[1] dimasukkan dalam C. Untuk himpunan data yang elemennya dimasukkan dalam
C, elemen yang akan dibandingkan adalah elemen berikutnya. Dan seterusnya.

Contoh :

A = 11 12 23 33 45 67

B=9 12 21 42

Disini A[1] = 11 dan B[1] = 9 dibandingkan dan A[1] > B[1], B[1] dimasukkan dalam C.
Pembandingan berikutnya A[1] = 11 dibandingkan dengan B[2] = 12, A[1] dimasukkan dalam C,
dan begitu seterusnya.

Algoritma MERGING :

1. NA = 1 ; NB = 1 dan PTR = 1
2. Repeat While NA £ R and NB £ S
If A[NA] < B[NB] then
a. C[PTR] = A[NA]
b. PTR = PTR + 1 ; NA = NA + 1
Else
a. C[PTR] = B[NB]
b. PTR = PTR + 1 ; NB = NB + 1
[End If Structure]
[End Loop]

Pengurutan & Pencarian Data 105


3. If NA > R then
Repeat For k = 0,1,2,3,.....,S-NB
C[PTR+K] = B[NB+K]
[End loop]
Else
Repeat for K = 0,1,2,3,.....,R-NA
C[PTR+K] = A[NA+K]
[End loop]
[End If Structure]
4. Exit

Kompleksitas algoritma Merging = O(n). Dengan kata lain algoritma Merging dapat dijalankan
dalam waktu yang linear.

d. Merge Sort
Misal : Array A dangan n elemen A[1], A[2], ....., A[N] dalam memori. Algoritma Merge Sort
yang akan mengurutkan A akan digambarkan sebagai berikut :

Contoh :

Array A berisi 6 elemen sbb :

15 12 45 56 13 10

Masing-masing proses dalam algoritma merge sort akan dimulai dari elemen awal dalam A dan
menggabungkan (merge) pasangan subarray yang terurut sbb :

15 12 45 56 13 10

12 15 45 56 1013

12 15 45 56 10 13

10 12 13 15 45 56

Kompleksitas dari proses merge-sort = O(n).

Pengurutan & Pencarian Data 106


e. Tournament Sort
Tournament Sort disebut juga dengan Tree Selection Sort. Misal terdapat elemen data sebagai
berikut : 6, 25, 7, 2, 14, 10, 9, 22, 3, 14, 8, 12, 1, 30, 13. Asumsikan bahwa batasan proses dalam
memori hanya 4 buah elemen setiap saatnya. Algoritma Tournament Sort membagi 4 elemen
tersebut menjadi 2 pasangan elemen sbb :
6
25

7
2
Asumsikan bahwa data tersebut akan diurutkan secara ascending, sehingga elemen terkecil pada
masing-masing pasangan di atas adalah 2 dan 6.
6 6
25

7 2
2
2 adalah elemen terkecil dan merupakan elemen pertama pada output dari urutan yang diurutkan.
6 6
25
2 2
7 2
2
Proses yang berikutnya akan ditentukan elemen kedua dalam list terurut. 2 tidak diikutsertakan
kembali.
6 6
25
6 2, 6
7 7
*
Proses selanjutnya :
6 6
25
6 2, 6
7 7
14

Pengurutan & Pencarian Data 107


Proses ketiga :
10 10
25
7 2, 6, 7
7 7
14
Proses keempat :
10 10
25
9 2, 6, 7, 9
9 9
14
Proses kelima :
10 10
25
10 2, 6, 7, 9, 10
22 14
14
Pada proses keenam elemen 3 dimasukkan dalam tree :
3
25

22 14
14
Apabila 3 diikutkan dalam proses, maka urutan list terurut pada output akan berantakan. Untuk
mengatasinya, terdapat aturan sbb :
If Keynew < Keylastout

then keynew diletakkan dalam tree tetapi untuk sementara waktu di-

diskualifikasikan.

Catatan : Keylastout adalah key terakhir yang ada dalam list terurut.

Elemen yang didiskualifikasikan akan ditandai dengan asterisk (*). Sehingga hasil dari proses
enam adalah :
*3 25
25
14 2, 6, 7, 9, 10, 14
22 14
14

Pengurutan & Pencarian Data 108


Pada proses ketujuh, elemen berikutnya adalah 14. Karena elemen terakhir dalam list terurut tidak
lebih kecil dari elemen yang akan dimasukkan, yakni 14, maka elemen 14 masuk dalam list
terurut.
*3 25
25
14 2, 6, 7, 9, 10, 14, 14
22 14
14
Proses kedelapan, elemen berikutnya 8 dan elemen ini untuk sementara akan didiskualifikasi
karena 8 < dari elemen terakhir dalam list terurut yakni 14.
*3 25
25
22 2, 6, 7, 9, 10, 14, 14, 22
22 22
*8
Proses kesembilan :
*3 25
25
25 2, 6, 7, 9, 10, 14, 14, 22, 25
*12 *
*8
Proses kesepuluh, elemen berikutnya 1 :
*3
*1

*12
*8
Sekarang semua elemen yang ada adalah elemen yang didiskualifikasikan. Dan saat ini baru 9
elemen yang diurutkan. Sekarang elemen yang untuk sementara didiskualifikasikan, dilepaskan
dari diskualifikasi dan proses dimulai kembali. Kali ini akan terbentuk list terurut kedua dari
elemen-elemen yang didiskualifikasi sebelumnya. Sehingga proses 10 :
3 1
1
1 2, 6, 7, 9, 10, 14, 14, 22, 25
12 8 1
8
Proses 11, elemen 30 :

3 3

Pengurutan & Pencarian Data 109


30
3 2, 6, 7, 9, 10, 14, 14, 22, 25
12 8 1, 3
8
Proses 12 :
13 13
30
8 2, 6, 7, 9, 10, 14, 14, 22, 25
12 8 1, 3, 8
8
Sekarang input list kosong. Sehingga proses 13 :
13 13
30
12 2, 6, 7, 9, 10, 14, 14, 22, 25
12 12 1, 3, 8, 12
*
Proses 14 dan 15 tidak terdapat elemen yang dimasukkan dalam tree. Hasil akhir dari proses
tournament sort ini menghasilkan 2 himpunan elemen data yang terurut :

2, 6, 7, 9, 10, 14, 14, 22, 25

1, 3, 8, 12, 13, 30

Kedua himpunan data yang terurut tersebut dapat digabungkan menjadi satu list data terurut
dengan menggunakan algoritma Merging.

f. Shell Sort
Disebut juga dengan metoda pertambahan menurun (diminishing increment). Metoda ini
dikembangkan oleh Donald L. Shell tahun 1959. Metoda ini memanfaatkan penukaran sepasang
elemen untuk mencapai keadaan urut. Dalam hal ini jarak dua elemen yang dibandingkan dan
ditukarkan tertentu.

Pada langkah pertama, ambil elemen pertama dan kita bandingkan dengan elemen pada jarak
tertentu dari elemen pertama tersebut. Kemudian elemen kedua dibandingkan dengan elemen lain
dengan jarak yang sama. Demikian seterusnya sampai seluruh elemen dibandingkan.

Pada contoh berikut, proses pertama kali jarak diambil separoh banyaknya elemen yang akan
diurutkan. Proses kedua jaraknya diambil separuh jarak yang pertama, dst....

Misal terdapat elemen sebagai berikut :


Pengurutan & Pencarian Data 110
23 45 12 24 56 34 27 23 16

Proses pengurutan menggunakan metoda Shell ada pada Tabel 10.3. Dalam hal ini elemen yang
ditulis miring adalah elemen yang dibandingkan dan kemudian ditukar, jika perlu.

Tabel 10.3 Penggambaran proses Shell Sort

Jarak A[1] A[2] A[3] A[4] A[5] A[6] A[7] A[8] A[9]

Awal 23 45 12 24 56 34 27 23 16

Jarak = 4 23 45 12 24 56 34 27 23 16
23 45 12 24 56 34 27 23 16
23 34 12 24 56 45 27 23 16
23 34 12 24 56 45 27 23 16
23 34 12 23 56 45 27 24 16
23 34 12 23 16 45 27 24 56

Jarak = 2 23 34 12 23 16 45 27 24 56
12 34 23 23 16 45 27 24 56
12 23 23 34 16 45 27 24 56
12 23 16 34 23 45 27 24 56
12 23 16 34 23 45 27 24 56
12 23 16 34 23 45 27 24 56
12 23 16 34 23 24 27 45 56
12 23 16 34 23 24 27 45 56

Jarak = 1 12 23 16 34 23 24 27 45 56
12 23 16 34 23 24 27 45 56
12 16 23 34 23 24 27 45 56
12 16 23 34 23 24 27 45 56
12 16 23 23 34 24 27 45 56
12 16 23 23 24 34 27 45 56
12 16 23 23 24 27 34 45 56
12 16 23 23 24 27 34 45 56
12 16 23 23 24 27 34 45 56

Akhir 12 16 23 23 24 27 34 45 56

10.2.2 Searching

Pengurutan & Pencarian Data 111


Pencarian data sering disebut juga dengan istilah table look-up atau storage and retrieval
information, adalah suatu proses untuk mengumpulkan sejumlah informasi di dalam pengingat
komputer dan kemudian mencari kembali informasi yang diperlukan.

Proses pencarian ditujukan untuk menemukan harga/data tertentu didalam sekumpulan harga yang
bertipe sama. Dalam proses pemrograman serching/pencarian biasanya digunakan untuk :
- proses update atau penghapusan data  sebelumnya melakukan proses pencarian data.
- Penyisipan data pada sekumpulan data, jika data sudah ada maka proses penyisipan
tidak diperkenankan. Jika data tidak ada maka proses penyisipan dilakukan tujuan
digunakan agar tidak terjadi duplikasi data

1. Tehnik Pencarian Tunggal :


 Tehnik Sequential Search / Linier Search
 Tehnik Binary Search

a. Pencarian Sequential
Merupakan algoritma pencarian yang sangat sederhana, proses pencarian beruntun adalah proses
membandingkan setiap elemen larik satu per satu secara beruntun, mulai dari elemen pertama
sampai elemen yang dicari ditemukan dan seluruh elemen sudah diperiksa.

13 16 14 21 76 21

Nilai yang dicari: 21


Maka elemen yang diperiksa : 13 16 14 21
Index ketemu : 4

Nilai yang dicari: 13


Maka elemen yang diperiksa : 13
Index ketemu : 1

Nilai yang dicari: 15


Maka elemen yang diperiksa : 13 16 14 21 76 21
Index ketemu : 0

Pengurutan & Pencarian Data 112


Algoritma dari proses Pencarian diatas adalah:
1. Tentukan i=1, Ketemu = 0.
2. Masukan Nilai X  nilai yang dicari.
3. Jika Nilai[i] <> X maka i=i+1, kembali kelangkah 2.
4. Jika Nilai[i] = X maka Ketemu =i.
5. Jika Ketemu = 0 maka Cetak “nilai X tidak ketemu”
6. Jika tidak (Ketemu <>0)Cetak “nilai X ketemu pada posisi Ketemu”
7. Selesai
Berikut ini merupakan Procedure CariUrut pada Pascal :

Procedure CariUrut(Var Ada : Boolean; Var N, Posisi : Integer;


Var Temp : Data; Elemen : Char);
Var I : Integer;
Begin
Ada:=False;
For I:=1 To N Do If Temp[I] = Elemen Then {Data yang dicari ketemu}
Begin
Posisi:=I;
Ada:=True;
Exit;
End;

If Not Ada Then


Begin
Inc(N);
Temp[N]:=Elemen; {Tambah di posisi akhir}
End;
End;

b. Pencarian Binary Search


Metode pencarian yang diterapkan pada sekumpulan data yang sudah terurut (menaik maupun
menurun), metode ini digunakan untuk melakukan pencarian secara cepat dengan data yang
sudah terurut.

Konsep Pencarian Binary/Bagi Dua


 Pilih Indek Kiri (Low) dan Indek Kanan (High)
 Langkah 1:
Bagi dua elemen larik pada elemen tengah.
Elemen tengah adalah elemen dengan indek middle=(low+high) div 2.
Elemen tengah (middle), akan membagi array menjadi 2 bagian yaitu:

Pengurutan & Pencarian Data 113


 Bagian kiri, dengan index LARIK[Low .. middle-1]
 Bagian Kanan, dengan index LARIK[middle+1..High]
 Langkah 2:
 Periksa apakah LARIK[middle] = X , pencarian akan dihentikan sebab X sudah ditemukan
 Jika LARIK[middle] <> X, maka kita tentukan pencarian akan dilakukan disebelah kiri atau
kanan.
 Jika LARIK[middle] < X, maka pencarian dilakukan dibagian kiri LARIK
 Jika LARIK[middle] > X, maka pencarian dilakukan di bagian kanan LARIK
 Langkah 3:
Ulangi langkah 1 sampai dengan X ditemukan, atau low > high (menentukan ukuran larik sudah 0).

Ilustrasi Pencarian Bagi Dua.

81 76 21 18 16 13 10 7
1 2 3 4 5 6 7 8
Low High

1. Misalkan elemen yang dicari adalah X=18.


Langkah 1:
Low = 1 dan High = 8
Elemen tengah Middle = (1+8) div 2 = 9 div 2 = 4

81 76 21 18 16 13 10 7
1 2 3 4 5 6 7 8
Low Middle High

Langkah 2:
Larik[4] = X ? (18 = 18) true  X ditemukan, pencarian dihentikan.

2. Misalkan elemen yang dicari adalah X=16.


ITERASI 1
Langkah 1:
Low = 1 dan High = 8
Elemen tengah Middle = (1+8) div 2 = 9 div 2 = 4
81 76 21 18 16 13 10 7
1 2 3 4 5 6 7 8
Low Middle High
Pengurutan & Pencarian Data 114
kiri kanan

Langkah 2:
Larik[4] = X ? (18 = 16) FALSE, sehingga diputuskan pencarian di kiri atau dikanan.
Jika Larik[4] > 16 ?, (18 > 16) TRUE, lakukan pencarian disebelah kanan dengan Low = middle+1 
4+1 = 5 dan High = 8, Tetap.

16 13 10 7
5 6 7 8
low High

ITERASI 2
Langkah 1:
Low = 5 dan High=8
Elemen tengah Middle = (5+8) div 2 = 13 div 2 = 6
16 13 10 7
5 6 7 8
low middle High

Langkah 2:
Larik[6] = X ? (13 = 16) FALSE, sehingga diputuskan pencarian di kiri atau dikanan.
Jika Larik[6] > 16 ?, (13 > 16) FALSE, lakukan pencarian disebelah KIRI dengan Low = 5 (TETAP) dan
High = middle-1 = 5

16
5
Low/high

ITERASI 3
Langkah 1:
Low = 5 dan High=5
Elemen tengah Middle = (5+5) div 2 = 10 div 2 = 5
16
5
middle

Langkah 2:
Larik[5] = X ? (16 = 16) TRUE (X ditemukan , pencarian dihentikan)

Pengurutan & Pencarian Data 115


3. Misalkan elemen yang dicari X=100.
Gambarkan langkah-langkah penyelesaiannya?

Dari ilustrasi diatas dapat dibuat algoritma sebagai berikut:


(dengan data urut menurun/ descending)
1. Masukan Bil yang dicari X
2. tentukan low=1 dan high = N
3. Tentukan nilai tengah : middle = (low + high) div 2
4. Cek, jika LARIK[middle] = X maka Nilai X yang dicari ditemukan, kelangkah 8
5. jika LARIK[middle] > X maka low=middle+1, kelangkah 7
6. jika LARIK[middle] < X maka high=middle-1, kelangkah 7
7. Jika low > high, “bil X tidak ditemukan” dan kelangkah 8, jika tidak kelangkah 3.
8. selesai.

Berikut ini merupakan Procedure CariBiner pada Pascal :

Procedure CariBiner(Var Ada : Boolean; Var Posisi : Integer;


Var Temp : Data; Elemen : Char; N : Integer);
Var Atas, Bawah, Tengah : Integer;
Begin
Ada:=False;
Atas:=N;
Bawah:=1;
While Atas >= Bawah Do Begin
Tengah := (Atas + Bawah) Div 2;
If Elemen < Temp[Tengah] Then
Atas:=Tengah - 1
Else If Elemen > Temp[Tengah] Then
Bawah := Tengah + 1
Else
Begin
Ada:=True;
Posisi:=Tengah;
Bawah := Atas + 1;
End;
End;
End;

10.4 Studi Kasus


10.4.1 Contoh Kasus

Pengurutan & Pencarian Data 116


Kasus 1 :
Anda diminta membuat sebuah program sorting dengan metode buble sort. Mintalah user untuk
memasukkan 10 angka. Lalu tampilkan angka-angka tersebut setelah disort baik secara ascending
maupun descending

Layar 1 :
Masukkan 10 data
==========
Data ke-1 = 5 Data ke-6 = 45
Data ke-2 = 2 Data ke-7 = 8
Data ke-3 = 67 Data ke-8 = 23
Data ke-4 = 43 Data ke-9 = 39
Data ke-5 = 90 Data ke-10 = 7
{ket : tampilan ketika mengiput 10 angka}

Layar 2 :
5 2 67 43 90 45 8 23 39 7

Data yang telah diurutkan :


**************
Ascending : 2 5 7 8 23 39 43 45 67 90
Descending : 90 67 45 43 39 23 8 7 5 2
{ket : tampilan setelah dilakukan bubble sort}

Jawaban dalam bahasa Pascal ::


Program buble_sort;
uses crt;
const max = 10;
Type arr = array[1..max] of byte;
Var i : byte;
Data : arr;
Procedure Input;
begin
Clrscr;
Writeln (‘Masukkan 10 data’);
Writeln (‘= = = = = = = = = =’);
For i := 1 to max do {input 10 data}

Pengurutan & Pencarian Data 117


begin
write(‘Data ke-‘, i ,’=’); readln(data[i]);
end;
Clrscr;
For i := 1 to max do
Write(data[i],’ ‘);
Writeln;
Writeln (‘ * * * * * * * * * * * * * * *);
Writeln (‘Data yang telah diurutkan :’);
end;
Procedure Change (var a,b :byte); {procedure untuk menukar data}
Var c : byte;
Begin
c := a; a := b; b := c;
end;
Procedure Asc_Buble; {pengurutan secara ascending}
Var p,q : byte;
flaq : boolean;
begin
flaq:=false;
p:=2;
while (p<max) and (not flaq) do
begin
flaq:=true;
for q := max downto p do
if data[q] < data[q-1] then
begin
change (data[q], data[q-1]);
flaq:=false;
end;
inc(i);
end;
write(‘Ascending :’);
end;
Procedure Desc_Buble; {pengurutan secara descending}
Var p, q : byte;
Flaq : boolean;
Begin
flaq:=false;
p:=2;
while (p<max) and (not flaq) do
begin
flaq:=true;
for q := max downto p do

Pengurutan & Pencarian Data 118


if data[q] < data[q-1] then
begin
change (data[q], data[q-1]);
flaq:=false;
end;
inc(i);
end;
write(‘Descending :’);
end;
Procedure Output;
Begin
For i := 1 to max do
Write(data[i],’’);
Writeln;
end;
Begin {program utama}
Input;
Asc_buble; output;
Desc_buble; output;
Readkey;
end.

Kasus 2
Output:
1. Pada layar komputer ditampilkan nilai dari 100 elemen array yang bertipe integer serta
nilai bersifat acak dan berkisar di antara 1 dan 1000.
2. Kemudian pada layar komputer ditampilkan pesan yang meminta operator memasukkan
nilai yang dicari.
3. Jika nilai yang dimaksud tidak ditemukan, pada layar komputer akan ditampilkan pesan
'Nilai tidak ditemukan'. Jika nilai tersebut berhasil ditemukan, pada layar komputer akan
ditampilkan pesan 'Nilai ditemukan pada elemen ke X', dengan X adalah indeks elemen
array tempat tersimpannya array tersebut.
Input:
1. Array bertipe integer yang terdiri dari 100 elemen.
2. Nilai yang dimasukkan oleh operator untuk dicari di dalam array.

Jawaban dalam bahasa Pascal :


program Cari_Dalam_Array;
var
kumpulanNilai : array [1..100] of integer;

Pengurutan & Pencarian Data 119


nilaiDicari, indeks, i : integer;
label 9999;
begin
{Mengisi 100 elemen array dengan nilai acak dan menampilkannya}
randomize;
for i:= 1 to 100 do
begin
kumpulanNilai[i] := random(999)+1;
write(kumpulanNilai[i], ' ');
end;
writeln;

{Meminta operator memasukkan nilai yang dicari}


writeln ('Silakan ketikkan nilai yang dicari: ');
readln (nilaiDicari);

{Mencari nilai di dalam array}


indeks := 0;
for i:= 1 to 100 do
begin
if (kumpulanNilai[i] = nilaiDicari) then
begin
indeks := i;
goto 9999;
end;
end;
9999 : {label untuk keluar dari loop for..do}

{Menampilkan hasil pencarian}


if (indeks := 0) then
writeln ('Nilai tidak ditemukan')
else
writeln ('Nilai ditemukan pada elemen ke ',indeks);
end.

10.4.2 Soal-Soal
1) Jelaskan pengertian Search dan Sorting, beserta jenis-jenis dari Search dan Sorting.
2) Jelaskan bagaimana proses pencarian data menggunakan metode Bubble/Exchange Sort, Selection
Sort, Shell Sort, Quick Sort.
3) Apa yang dimaksud dengan Binary Search serta bagaimana algoritmanya?

Pengurutan & Pencarian Data 120


4) Buat data yang belum terurut lalu dengan menggunakan keempat metode diatas dan urutkan data
tersebut langkah demi langkah.

10.5 Kesimpulan

Dari algoritma-algoritma yang sudah kita pelajari di atas, semua algoritma stabil kecuali Quick
Sort. Ketika menggunakan Quick Sort, kita tidak bisa menentukan urutan relatif dari elemen-
elemen yang seri.

Berikut ini adalah tabel perbandingan algoritma-algoritma sort yang sudah kita pelajari:

Running
Algoritma Stabil Catatan
time
Selection
Ya O(N2) Running time tidak tergantung input
Sort
Insertion
Ya O(N2) Jika input hampir terurut, running time menjadi sangat cepat
Sort
Bubble Sort Ya O(N2) Lambat dibandingkan algoritma O(N2) lainnya
O(N log
Merge Sort Ya Running time tidak tergantung input
N)
Paling cepat dibandingkan algoritma O(N log N) lainnya, tetapi
O(N log pada kasus terburuk (sangat jarang terjadi) menjadi O(N2).
Quick Sort Tidak
N) Algoritma ini adalah algoritma yang paling populer digunakan di
kompetisi informatika.

Sedang yang terkait dengan masalah pencarian, keunggulan metode pencarian biner adalah bahwa
kecepatan pencarian hanya berkurang secara logaritmik dibanding bertambahnya data. Jumlah
pembandingan dalam proses pencarian biner adalah 2log (N), dengan N adalah jumlah data dalam
kumpulan nilai. Misalnya jumlah pembandingan pada proses pencarian biner yang datanya
berjumlah 64 (26) adalah 2log 64 = 2log 26 = 6 kali dan untuk data sebanyak 65536 (216), jumlah
pembandingan adalah 16 kali. Dengan demikian, jika jumlah data meningkat sebanyak lebih dari
1000 kali lipat (dari 64 menjadi 65536), maka jumlah pembandingan hanya naik sebanyak 16/6
kali atau kurang dari 3 kali lipat. Atau dengan kata lain, peningkatan jumlah data lebih dari 1000
kali lipat hanya akan diikuti dengan penurunan kecepatan pencarian sebanyak kurang dari 3 kali
lipat. Karena itu, sebagaimana yang telah kita singgung dalam Modul Kuliah 2, proses pengurutan
(sorting) adalah hal yang sangat penting untuk dilakukan terhadap sekumpulan data, mengingat
bahwa data yang sudah terurut bisa memanfaatkan keampuhan dari metode binary search.
Pengurutan & Pencarian Data 121

Anda mungkin juga menyukai