• Tidak ada hasil yang ditemukan

PENGURUTAN DATA 2.1 Definisi Pengurutan 2.2 Metode-metode Pengurutan

N/A
N/A
Protected

Academic year: 2021

Membagikan "PENGURUTAN DATA 2.1 Definisi Pengurutan 2.2 Metode-metode Pengurutan"

Copied!
27
0
0

Teks penuh

(1)

PENGURUTAN DATA

2.1 Definisi Pengurutan

Pengurutan (sorting) adalah proses mengatur sekumpulan objek menurut urutan atau susunan tertentu. Urutan objek tersebut dapat menaik (ascending) atau menurun (descending). Bila N buah objek (data) disimpan dalam larik L, maka pengurutan menaik berarti menyusun elemen larik sedemikian sehingga :

L[1]≤ L[2]≤ L[3] ≤ ….. ≤ L[N]

Sedangkan pengurutan menurun berarti menyusun elemen larik sedemikian sehingga:

L[1]≥ L[2] ≥ L[3] ≥ ….. ≥ L[N]

Data yang diurut dapat berupa data yang bertipe dasar atau tipe terstruktur (record). Jika data bertipe terstruktur, maka harus dispesifikasikan berdasarkan field apa data tersebut diurutkan. Field yang dijadikan dasar pengurutan dikenal sebagai field kunci.

Contoh :

Di bawah ini diberikan beberapa contoh data yang terurut : a. 23, 27, 45, 67, 100, 130, 501

(data bertipe integer terurut menaik) b. 50, 27, 21.009, 20.3, 19.0, -5.2, -10.9

(data bertipe riil terurut menurun) c. ‘Amir’’Badu’’Budi’’Dudi’’Zamzani’

(data bertipe string terurut menaik) d. ‘d’,’e’,’g’,’i’,’x’

(data bertipe karakter terurut menaik)

2.2 Metode-metode Pengurutan

Adanya kebutuhan terhadap proses pengurutan memunculkan bermacam-macam metode pengurutan. Banyak metode pengurutan yang telah ditemukan. Hal ini menunjukkan bahwa persoalan yang kaya dengan solusi algoritmik. Metode pengurutan yang ditemukan dalam literatur komputer antara lain :

(2)

2. Metode Pengurutan Pilih (Selection Sort) 3. Metode Pengurutan Sisip (Insertion Sort) 4. Metode Pengurutan Shell

5. Metode Pengurutan Quick 6. Metode Pengurutan Merge 7. Metode Pengurutan Radix 8. Metode Pengurutan Tree

2.2.1 Metoda Pengurutan Gelembung

Metode pengurutan gelembung (bubble sort) diinspirasi oleh gelembung sabun yang berada di atas permukaan air. Karena berat jenis gelembung asbun lebih ringan daripada berat jenis air, maka gelembung sabun selalu terapung ke atas permukaan. Secara umum, benda yang berat akan terbenam dan benda-benda yang ringan akan terapung.

Prinsip pengapungan tersebut yang digunakan pada metode pengurutan gelembung. Apabila kita menginginkan larik terurut menaik, maka elemen yang nilainya paling kecil “diapungkan”, artinya dipindahkan ke ujung larik melalui proses pertukaran. Proses pengapungan dilakukan sebanyak N-1 langkah (satu langkah disebut juga satu kali pass) dengan N adalah ukuran larik. Pada akhir setiap langkah ke-I , larik L[1-N] akan terbagi atas dua bagian yaitu bagian yang sudah terurut dan yang belum terurut. Setelah langkah terakhir diperoleh larik L[1-N] yang sudah terurut menaik.

Algoritma Pengurutan gelembung {Untuk larik yang terurut menaik} 1. input N jumlah data

2. untuk pass = 1, 2, …. N-1 set maks := A[K] untuk K = 1, 2, …. N

jika maks < A[K] maka maks := A[K]

(3)

3. selesai

rincian setiap pass adalah :

pass 1 : Mulai dari elemen K = N, N-1, …2, bandingkan L[K] dengan L[K-1]. Jika L[K]<L[K-1], tukar posisi L[K] dengan L[K-1]

pada akhir langkah 1, elemen L[1] berisi harga minimum pertama. pass 1 : Mulai dari elemen K = N, N-1, …3, bandingkan L[K] dengan

L[K-1]. Jika L[K]<L[K-1], tukar posisi L[K] dengan L[K-1]

pada akhir langkah 2, elemen L[2] berisi harga minimum kedua, larik L[1..2] terurut, sedangkan L[3..N] belum terurut.

pass N-1 : Mulai dari elemen K = N, bandingkan L[K] dengan L[K-1]. Jika L[K]<L[K-1], tukar posisi L[K] dengan L[K-1]

Pada akhir langkah N –1, elemen L[N-1] berisi nilai minimum ke-(N-1) an larik L[1..N-1] terurut menaik (elemen yang tersisa adalah L[N], tidak perlu diurut karena hanya satu-satunya).

Contoh:

Tinjau laruk L dengan N=6 buah elemen yang belum terurut. Larik ini akan diurut menaik.

25 27 10 8 76 21

1 2 3 4 5 6

pass 1:

K Elemen yang dibandingkan Pertukarkan Hasil Sementara

K = 6 L[6]<L[5]? Ya 25,27,10,8,21,76

K = 5 L[5]<L[4]? Tidak 25,27,10,8,21,76

K = 4 L[4]<L[3]? Ya 25,27,8,10,21,76

K = 3 L[3]<L[2]? Ya 25,8,27,10,21,76

K = 2 L[2]<L[1]? Ya 8,25,27,10,21,76

Hasil akhir pass 1

8 25 27 10 21 76

1 2 3 4 5 6

(4)

K Elemen yang dibandingkan Pertukarkan Hasil Sementara

K = 6 L[6]<L[5]? Tidak 8,25,27,10,21,76

K = 5 L[5]<L[4]? Tidak 8,25,27,10,21,76

K = 4 L[4]<L[3]? Ya 8,25,10,27,21,76

K = 3 L[3]<L[2]? Ya 8,10,25,27,21,76

Hasil akhir pass 2

8 10 25 27 21 76

1 2 3 4 5 6

pass 3:

K Elemen yang dibandingkan Pertukarkan Hasil Sementara

K = 6 L[6]<L[5]? Tidak 8,10,25,27,21,76

K = 5 L[5]<L[4]? Ya 8,10,25,21,27,76

K = 4 L[4]<L[3]? Ya 8,10,21,25,27,76

Hasil akhir pass 2

8 10 21 25 27 76

1 2 3 4 5 6

pass 4:

K Elemen yang dibandingkan Pertukarkan Hasil Sementara

K = 6 L[6]<L[5]? Tidak 8,10,21,25,27,76

K = 5 L[5]<L[4]? Tidak 8,10,21,25,27,76

Hasil akhir pass 4

8 10 21 25 27 76

1 2 3 4 5 6

pass 5:

K Elemen yang dibandingkan Pertukarkan Hasil Sementara

K = 6 L[6]<L[5]? Tidak 8,10,21,25,27,76

Hasil akhir pass 5

8 10 21 25 27 76

(5)

tersisa satu elemen (yaitu 76), maka pengurutan selesai. Larik L sudah terurut menaik.

Untuk memperoleh larik yang terurut menurun, kita melakukan proses sebaliknya, yaitu “melemparkan” elemen yang berharga maksimum ke”atas” (atau ke ujung “kiri” larik).

Pengurutan gelembung merupakan metode pengurutan yang tidak efisien karena banyaknya langkah yang dilakukan pada setiap langkah pengapungan. Untuk ukuran larik yang besar, pengurutan dengan metode ini membutuhkan waktu yang lama.

2.2.2 Metode Pengurutan Pilih

Metode ini disebut pengurutan pilih karena gagasan dasarnya adalah memilih elemen maksimum/minimum dari larik, lalu menempatkan elemen tersebut pada awal/akhir larik (elemen terujung). Selanjutnya elemen tersebut “diisolasi” dan tidak disertakan pada proses selanjutnya. Proses yang sama diulang pada larik yang tersisa.

Algoritma Pengurutan Pilih Maksimum

Algoritma pengurutan pilih maksimum yaitu memilih elemen maksimum sebagai basis pengurutan.

Untuk mendapatkan larik yang terurut menaik. Secara umum algoritma pengurutan pilih maksimum ditulis sebagai berikut :

1. jumlah pass = N-1

2. Untuk setiap I = 1, 2, … pass

2.1 cari elemen terbesar (maks) mulai dari elemen ke-1 sampai elemen ke-N

2.2 pertukarkan maks dengan elemen ke-N

2.3 kurangi N satu (karena elemen ke-N sudah terurut) rincian pada setiap pass adalah :

pass 1 : Cari elemen maksimum di L[1..N]

pertukarkan elemen maksimum dngan elemen L[N] ukuran larik yang belum terurut = N-1

(6)

pass 2 : Cari elemen maksimum di L[1..N-1]

pertukarkan elemen maksimum dngan elemen L[N-1] ukuran larik yang belum terurut = N-2

pass N-1 : Cari elemen maksimum di L[1..2]

pertukarkan elemen maksimum dngan elemen L[2] ukuran larik yang belum terurut =1

Elemen yang tersisa adalah L[1], tidak perlu diurut karena hanya satu-satunya.

Contoh:

Tinjau larik dengan N=6 buah elemen di bawah ini. Larik ini akan diurut menaik:

29 27 10 8 76 21

1 2 3 4 5 6

pass 1:

Cari elemen maksimum di dalam larik L[1..6] maks = L[5] = 76 Pertukarkan maks dengan L[6], diperoleh :

29 27 10 8 21 76

1 2 3 4 5 6

pass 2:

(berdasarkan susunan larik hasil pass 1)

Cari elemen maksimum di dalam larik L[1..5] maks = L[1] = 29 Pertukarkan maks dengan L[5], diperoleh :

21 27 10 8 29 76

1 2 3 4 5 6

pass 3:

(berdasarkan susunan larik hasil pass 2)

Cari elemen maksimum di dalam larik L[1..4] maks = L[2] = 27 Pertukarkan maks dengan L[4], diperoleh :

21 8 10 27 29 76

1 2 3 4 5 6

pass 4:

(7)

Cari elemen maksimum di dalam larik L[1..3] maks = L[1] = 21 Pertukarkan maks dengan L[3], diperoleh :

10 8 21 27 29 76

1 2 3 4 5 6

pass 5:

(berdasarkan susunan larik hasil pass 4)

Cari elemen maksimum di dalam larik L[1..2] maks = L[1] = 10 Pertukarkan maks dengan L[3], diperoleh :

8 10 21 27 29 76

1 2 3 4 5 6

tersisa satu elemen (yaitu 8) maka pengurutan selesai. Larik L sudah terurut menaik.

Apabila diinginkan larik yang terurut menurun, maka algoritma pengurutan pilih adalah :

Untuk setiap pass I = 1, 2, … N-1

1.1 cari elemen terbesar (maks) mulai dari elemen ke-1 sampai elemen ke-N 1.2 pertukarkan maks dengan elemen ke-N

rincian pada setiap pass adalah :

pass 1 : Cari elemen maksimum di L[1..N]

pertukarkan elemen maksimum dngan elemen L[1] pass 2 : Cari elemen maksimum di L[2..N]

pertukarkan elemen maksimum dngan elemen L[2] pass N-1 : Cari elemen maksimum di L[N-1,N]

pertukarkan elemen maksimum dngan elemen L[N-1]

Elemen yang tersisa adalah L[N], tidak perlu diurut karena hanya satu –satunya.

Contoh:

Tinjau larik dengan N=6 buah elemen di bawah ini. Larik ini akan diurut menaik:

29 27 10 8 76 21

(8)

pass 1:

Cari elemen maksimum di dalam larik L[1..6] Imaks = 5, L[Imaks] = 76 Pertukarkan L[Imaks] dengan L[1], diperoleh :

76 27 10 8 29 21

1 2 3 4 5 6

pass 2:

(berdasarkan susunan larik hasil pass 1)

Cari elemen maksimum di dalam larik L[2..6] Imaks = 5, L[Imaks] = 29 Pertukarkan L[Imaks] dengan L[2], diperoleh :

76 29 10 8 27 21

1 2 3 4 5 6

pass 3:

(berdasarkan susunan larik hasil pass 2)

Cari elemen maksimum di dalam larik L[3..6] Imaks = 5, L[Imaks] = 27 Pertukarkan L[Imaks] dengan L[3], diperoleh :

76 29 27 8 10 21

1 2 3 4 5 6

pass 4:

(berdasarkan susunan larik hasil pass 3)

Cari elemen maksimum di dalam larik L[4..6] Imaks = 6, L[1maks] = 21 Pertukarkan L[Imaks] dengan L[4], diperoleh :

76 29 27 21 10 8

1 2 3 4 5 6

pass 5:

(berdasarkan susunan larik hasil pass 4)

Cari elemen maksimum di dalam larik L[5..6] Imaks = 5, L[Imaks] = 10 Pertukarkan maks dengan L[2], diperoleh :

76 29 27 21 10 8

1 2 3 4 5 6

tersisa satu elemen (yaitu 8) maka pengurutan selesai. Larik L sudah terurut menurun.

(9)

Algoritma Pengurutan Pilih Minimum

Pada algoritma ini, basis pencarian adalah elemen minimum (terkecil). Elemen minimum ditempatkan di awal larik (agar terurut menaik) atau di akhir larik (agar larik terurut menurun)

Algoritma pilih minimum untuk memperoleh larik yang terurut menaik secara garis besarnya adalah sebagai berikut:

Untuk setiap pass I = 1, 2, … N-1

1.1 cari elemen terbesar (maks) mulai dari elemen ke-1 sampai elemen ke-N 1.2 pertukarkan maks dengan elemen ke-I

rincian pada setiap pass adalah :

pass 1 : Cari elemen minimum di L[1..N]

pertukarkan elemen minimum dngan elemen L[1] pass 2 : Cari elemen minimum di L[2..N]

pertukarkan elemen minimum dngan elemen L[2] pass N-1 : Cari elemen minimum di L[N-1,N]

pertukarkan elemen minimum dngan elemen L[N-1]

Elemen yang tersisa adalah L[N], tidak perlu diurut karena hanya satu –satunya. Contoh:

Tinjau larik dengan N=6 buah elemen di bawah ini. Larik ini akan diurut menaik:

29 27 10 8 76 21

1 2 3 4 5 6

pass 1:

Cari elemen minimum di dalam larik L[1..6] Imin = 4, L[Imin] = 8 Pertukarkan L[Imin] dengan L[1], diperoleh :

8 27 10 29 76 21

1 2 3 4 5 6

pass 2:

(berdasarkan susunan larik hasil pass 1)

Cari elemen maksimum di dalam larik L[2..6] Imin = 3, L[Imin] = 10 Pertukarkan L[Imin] dengan L[2], diperoleh :

8 10 27 29 76 21

(10)

pass 3:

(berdasarkan susunan larik hasil pass 2)

Cari elemen maksimum di dalam larik L[3..6] Imin = 6, L[Imin] = 21 Pertukarkan L[Imin] dengan L[3], diperoleh :

8 10 21 29 76 27

1 2 3 4 5 6

pass 4:

(berdasarkan susunan larik hasil pass 3)

Cari elemen maksimum di dalam larik L[4..6] Imin = 6, L[Imin] = 27 Pertukarkan L[Imin] dengan L[4], diperoleh :

8 10 21 27 76 29

1 2 3 4 5 6

pass 5:

(berdasarkan susunan larik hasil pass 4)

Cari elemen maksimum di dalam larik L[5..6] Imin = 6, L[Imin] = 29 Pertukarkan L[Imin] dengan L[5], diperoleh :

8 10 21 27 29 76

1 2 3 4 5 6

tersisa satu elemen (yaitu 76) maka pengurutan selesai. Larik L sudah terurut menaik.

Apabila diinginkan elemen terururt menurun, maka lakukan proses sebaliknya. Contoh:

Tinjau larik dengan N=6 buah elemen di bawah ini. Larik ini akan diurut menaik:

29 27 10 8 76 21

1 2 3 4 5 6

pass 1:

Cari elemen minimum di dalam larik L[1..6] Imin = 4, L[Imin] = 8 Pertukarkan L[Imin] dengan L[N], diperoleh :

29 27 10 21 76 8

(11)

pass 2:

(berdasarkan susunan larik hasil pass 1)

Cari elemen maksimum di dalam larik L[1..5] Imin = 3, L[Imin] = 10 Pertukarkan L[Imin] dengan L[5], diperoleh :

29 27 76 21 10 8

1 2 3 4 5 6

pass 3:

(berdasarkan susunan larik hasil pass 2)

Cari elemen maksimum di dalam larik L[1..4] Imin = 4, L[Imin] = 21 Pertukarkan L[Imin] dengan L[4], diperoleh :

29 27 76 21 10 8

1 2 3 4 5 6

pass 4:

(berdasarkan susunan larik hasil pass 3)

Cari elemen maksimum di dalam larik L[1..3] Imin = 2, L[Imin] = 27 Pertukarkan L[Imin] dengan L[3], diperoleh :

29 76 27 21 10 8

1 2 3 4 5 6

pass 5:

(berdasarkan susunan larik hasil pass 4)

Cari elemen maksimum di dalam larik L[1..2] Imin = 1, L[Imin] = 29 Pertukarkan L[Imin] dengan L[2], diperoleh :

76 29 27 21 10 8

1 2 3 4 5 6

tersisa satu elemen (yaitu 76) maka pengurutan selesai. Larik L sudah terurut menurun.

Dibandingkan dengan metode pengurutan gelembung, metode ini lebih baik karena operasi pertukaran elemen hanya dilakukan sekali saja pada setiap pass, dengan demikian lama pengurutannya berkurang dibandingkan metode pengurutan gelembung.

(12)

2.2.3 Metode Pengurutan Sisip

Berdasarkan namanya, pengurutan sisip (insertion sort) adalah metode pengurutan dengan cara menyisipkan elemen larik pada posisi yang tepat. Pencarian posisi yang tepat dilakukan dengan cara menyisir larik. Selama penyisiran dilakukan pergeseran elemen larik. Metode ini cocok untuk persoalan menyisipkan elemen baru ke dalam sekumpulan elemen yang sudah terurut.

Algoritma Pengurutan Sisip { untuk pengurutan menaik}

untuk setiap pass I = 2, 3, …. N , lakukan 1. set y = L[I]

2. sisipkan y pada tempat yang tepat antara L[1] …. L[2] rincian setiap pass adalah :

Asumsi (dianggap sebagai pass 1) : L[1] dianggap sudah pada tempatnya Pass 2 : Elemen y =L[2] harus dicari tempatnya yang tepat ke dalam L[1..2]

dengan cara menggeser elemen L[1..1] ke kanan (atau ke bawah) jika anda membayangkan larik terentang vertikal), bila L[1..1] lebih besar L[1]. Misalkan posisi yang tepat adalah K. sisipkan L[2] pada L[K]

Pass 2 : Elemen y =L[3] harus dicari tempatnya yang tepat ke dalam L[1..3] dengan cara menggeser elemen L[1..2] ke kanan (atau ke bawah) jika anda membayangkan larik terentang vertikal), bila L[1..2] lebih besar L[3]. Misalkan posisi yang tepat adalah K. sisipkan L[3] pada L[K]

Pass N : Elemen y =L[N] harus dicari tempatnya yang tepat ke dalam L[1..N] dengan cara menggeser elemen L[1..N-1] ke kanan (atau ke bawah) jika anda membayangkan larik terentang vertikal), bila L[1..N-1] lebih besar L[N]. Misalkan posisi yang tepat adalah K. sisipkan L[N] pada L[K]

(13)

Contoh:

Tinjau larik dengan N=6 buah elemen di bawah ini. Larik ini akan diurut menaik:

29 27 10 8 76 21

1 2 3 4 5 6

Asumsi (pass 1):

Elemen y = L[1] = 29 dianggap sudah terurut

29 27 10 8 76 21

1 2 3 4 5 6

pass 2:

(berdasarkan susunan larik hasil pass 1)

Cari posisi yang tepat untuk y = L[2] = 27 di dalam L[1..2], diperoleh: 27 29 10 8 76 21

1 2 3 4 5 6

pass 3:

(berdasarkan susunan larik hasil pass 2)

Cari posisi yang tepat untuk y = L[3] = 10 di dalam L[1..3], diperoleh: 10 27 29 8 76 21

1 2 3 4 5 6

pass 4:

(berdasarkan susunan larik hasil pass 3)

Cari posisi yang tepat untuk y = L[4] = 8 di dalam L[1..4], diperoleh: 8 10 27 29 76 21

1 2 3 4 5 6

pass 5:

(berdasarkan susunan larik hasil pass 4)

Cari posisi yang tepat untuk y = L[5] = 76 di dalam L[1..5], diperoleh: 8 10 27 29 76 21

(14)

pass 6:

(berdasarkan susunan larik hasil pass 5)

Cari posisi yang tepat untuk y = L[6] = 21 di dalam L[1..6], diperoleh: 8 10 21 27 29 76

1 2 3 4 5 6

Berdasarkan contoh di atas, dapat diketahui bahwa kelemahan dari metode ini terletak pada banyaknya operasi pergeseran yang diperlukan dalam mencari posisi yang tepat untuk elemen larik. Pada setiap pass I, operasi pergeseran yang diperlukan maksimum I-1 kali. Untuk larik N yang besar, jumlah operasi pergeseran meningkat secara kuadratik, sehingga pengurutan sisip kurang bagus untuk volume data yang besar.

2.2.4 Metode Pengurutan Shell

Metode ini diberi nama sesuai dengan nama penemunya yaitu Donald Shell tahun 1959. Metode ini merupakan perbaikan terhadap metode pengurutan sisip. Kelemahan metode sisip sudah diterangkan di atas. Jika data pada posisi ke-1000 ternyata posisi yang tepat adalah posisi ke-2, maka dibutuhkan kira-kira 998 kali pergeseran elemen.

Untuk mengurangi pergeseran terlalu jauh, kita mengurutkan larik setiap k elemen dengan metode pengurutan sisip, misalkan kita urutkan setiap 5 elemen (k kita namakan juga step atau increment ). Selanjutnya kita gunakan nilai step yang lebih kecil, misalnya k = 3 lalu kita urut setiap 3 elemen. Begitu seterusnya sampai nilai k = 1. karena setiap step selalu berkurang maka metode ini kadang-kadang dinamakan juga dengan metode pengurutan kenaikan berkurang (diminishing increment sort).

Contoh:

Untuk memperjelas metode pengurutan shell, tinjau pengurutan data integer berikut:

81 94 11 96 12 35 17 95 28 58 41 75 15

(15)

pass 1 (step =5): urutkan setiap 5 elemen 81 94 11 96 12 35 17 95 28 58 41 75 15 1 2 3 4 5 6 7 8 9 10 11 12 13 35………..41……….81 17……….75……….94 11………15………95 28………96 12………58

baris pertama menyatakan elemen yang sudah terurut pada posisi 1, 6 dan 11 baris kedua menyatakan elemen yang sudah terurut pada posisi 2, 7 dan 12 baris ketiga menyatakan elemen yang sudah terurut pada posisi 3, 9 dan 13 baris keempat menyatakan elemen yang sudah terurut pada posisi 4 dan 9 baris kelima menyatakan elemen yang sudah terurut pada posisi 5 dan 10 hasil pass 1 : 35, 17, 11, 28, 12, 41, 75, 15, 96, 58, 81, 94, 95 pass 2 (step = 3) : urutkan setiap 3 elemen 35 17 11 28 12 41 75 15 96 58 81 94 95 1 2 3 4 5 6 7 8 9 10 11 12 13 28………35………..58………75………….….95 12………15………..17……….81 11………..41………94……….96 hasil pass 2 : 28, 12, 11, 35, 15, 41, 58, 17, 94, 75, 81, 96, 95 28 12 11 35 15 41 58 17 94 75 81 96 95 1 2 3 4 5 6 7 8 9 10 11 12 13 11…12…15…17…28….35….41….58….75….81….94…95….96 hasil pass 3 : 11, 12, 15, 17, 28, 35, 41, 58, 75, 81, 94, 95, 96

Perhatikanlah pada pass yang terakhir (step =1) pengurutan shell menjadi sama dengan pengurutan sisip biasa.

Nilai-nilai step seperti 5, 3 dan 1 bukanlah angka “sihir”. Kita dapat memilih nilai-nilai step yang lain yang bukan kelipatan step yang lain. Pemilihan step yang merupakan perpangkatan dari dua (seperti 8, 4, 2, 1) dapat mengakibatkan perbandingan elemen yang sama pada suatu pass terulang kembali pada pass berikutnya.

(16)

1. step := N {N ukuran larik} 2. while step>1 do

a. step := step div 3 +1 b. for I =1,2 …step do

insertion sort setiap elemen step mulai dari elemen ke-I

Algoritma pengurutan shell dibuat dengan pertama-tama memodifikasi algoritma pengurutan sisip sedemikian sehinggakita dapat menspesifikasi titik awal pengurutan sisip sedemikian sehingga kita dapat menspesifikasi titik awal pengurutan da ukuran step (pada algoritma pengurutan sisip yang asli, titik awal pengurutan adalah elemen pertama dan ukuran step = 1). Algoritma pengurutan sisip ini kita beri nama InsSort.

2.2.5 Metoda QuickSort

Metoda QuickSort juga sering disebut dengan metoda partition exchange sort. Metoda ini ditemukan oleh C.A.R.Hoare .Untuk mempertinggi efektifitasnya, dalam metoda ini jarak kedua elemen yang akan ditukarkan nilainya ditentukan cukup besar.

Secara garis besar metoda ini dijelaskan sebagai berikut. Misalkan kita akan mengurutkan vector A yang mempunyai N elemen.Kita pilih sembarang elemen dari vector tersebut,biasanya elemen pertama , misalnya X.Lalu semua elemen tersebut disusun dengan menempatkan X pada posisi J,sedemikian rupa sehingga elemen ke–1 sampai elemen ke J-1 mempunyai nilai lebih kecil dari X dan elemen keJ+1 sampai ke N mempunyai nilai lebih besar dari X. Dengan demikian kita mempunyai 2 buah subvector, subvektor pertama nilai elemennya lebih kecil dari X, subvektor ke-2 nilai elemennya lebih besar dari X.

Pada langkah berikutnya, proses di atas diulang pada kedua subvektor, sehingga kita akan mempunyai empat buah subvektor. Proses di atas diulang pada setiap subvektor sehingga seluruh vector semua elemennya terurutkan.

Contoh :

(17)

23 45 12 24 56 34 27 23 16 Gambar 1

Diambil elemen pertama,yaitu 23. Elemen ini akan diletakkan di suatu posisi sehingga akan membagi vector atas 2 subvektor. Dengan subvektor pertama (subvektor kiri) nilai elemennya selalu lebih kecil atau sama dengan 23, dan subvektor kedua(subvektor kanan)nilainya selalu lebih besar dari 23.Masing-masing subvektor tersaji pada gambar 2.

12 23 16 23 45 24 56 34 27 Gambar 2

Kemudian pada kedua subvektor tersebut kita proses seperti di atas sampai seluruh vector dalam keadaan terurutkan. Gambar 3 menyajikan proses selengkapnya dari metode QuickSort untuk mengurutkan vector dari gambar 1.

24 56 12 45 23 34 27 23 16 12 23 16 23 45 24 56 34 27 12 23 12 23 24 34 27 45 56 12 16 23 23 24 27 34 45 56 12 16 23 23 24 27 34 45 56

Gambar 3. Ilustrasi Quicksort

Gambar 3. di atas menunjukkan proses pembagian dari vector menjadi subvektor-subvektor,subvektor menjadi subvektor dan seterusnya. Gambar 4 memperlihatkan isi vector setelah proses pengurutan selesai dilaksanakan.

12 16 23 23 24 27 34 45 56 Gambar 4.Hasil akhir dari metoda QuickSort

(18)

Dari ilustrasi di atas dapat dilihat bahwa metoda QuickSort bisa diimplementasikan menggunakan dua cara,yaitu :

1. Cara non Rekursif 2. Cara Rekursif

Pada kedua cara implementasi di atas, persoalan utama yang perlu diperhatikan adalah bagaimana kita meletakkan suatu elemen pada posisi yang tepat sehingga memenuhi ketentuan di atas dan bagaimana menyimpan batas-batas subvektor pada saat vector dibagi menjadi dua subvektor, kemudian menjadi 4 subvektor,8 subvektor dan seterusnya.

Gambar 3 memperlihatkan bahwa elemen pertama sampai di suatu tempat yang sesuai hanya dengan bergerak satu arah saja. Sedangkan untuk mempercepat penempatan suatu elemen , kita bisa bergerak dari dua arah, kiri dan kanan. Caranya adalah sebagai berikut :

Misalkan kita mempunyai vector dengan 9 elemen (N=9) 45 64 12 24 56 34 127 23 126

I=1 J=9

1. Tentukan I=1(untuk bergerak dari kiri ke kanan) dan J=N(untuk bergerak dari kanan ke kiri)

Proses akan dihentikan bila nilai I lebih besar atau sama dengan J

2. ambil 45(elemen pertama) pada posisi yang tepat bergerak dua arah.Dimulai dari elemen terakhir bergerak dari kanan ke kiri (J-1) lakukan pembandingan elemen yang dilalui dengan 45 sampai ditemukan elemen yang nilainy lebih kecil dari 45, yaitu 23,tukarkan kedua vector.

23 64 12 24 56 34 127 45 126 I=1 J=8

3. Bergerak dari kiri ke kanan (I+1),dimulai dari 23. Lakukan pembandingan pada setiap elemen yang dilalui dengan 45, sampai ditemukan elemen yang nilainya lebih besar dari 45, yaitu 64.Tukarkan kedua elemen.

23 45 12 24 56 34 127 64 126 I=2 J=8

4. Bergerak dari kanan ke kiri dimulai dari 127. Ditemukan bahwa 34 lebih kecil dari 45, sehingga kedua elemen ini saling ditukarkan.

(19)

23 34 12 24 56 45 127 64 126 I=2 J=6

5. Mulai dari 12(bergerak dari kiri ke kanan) sampai ditemukan elemen yang nilainya lebih besar dari 45,yaitu 56.Tukarkan kedua elemen.

23 34 12 24 45 56 127 64 126 I=5 J=6

5. Mulai dari 45(J=5) bergerak ke kiri sampai ditemukan elemen yang nilainya lebih kecil dari 45. Pada langkah ini ternyata nilai I dan J adalah sama. Hal ini berarti proses penempatan elemen yang bernilai 45 telah selesai .

Di sini kita dapatkan bahwa semua elemen yang terletak di sebelah kiri nilainya selalu lebih kecil dari 45, semua elemen yang terletak di sebelah kanan nilainya selalu lebih besar dari 45 ,seperti yang terlihat di bawah ini :

23 34 12 24 45 56 127 64 126 Subvektor kiri subvektor kanan

a. Metoda QuickSort Non Rekursif

Implementasi secara non rekursif memerlukan dua buah tumpukan yang digunakan untuk menyimpan batas-batas subvektor. Tumpukan pertama mencatat batas kiri subvektor dan tumpukan kedua mencatat bata kanan.

Masing-masing elemen pada dua tumpukan ini harus bertipe integer karena mencatat subskrip suatu elemen . dalam prosedur yang disajikan hanya digunakan sebuah tumpukan ,tapi elemennya bertipe record yang terdiri dari dua medan, yaitu Kiri (untuk mencatat batas kiri) dan Kanan (untuk mencatat batas kanan). Dalam hal ini tumpukan dideklaraikan sebagai array.

Dengan mengacu pada contoh di atas, sebelum metoda ini dijalankan elemen pertama tumpukan (elemen paling atas),medan kiri diatur sama dengan 1,dan medan kanan sama dengan N, lihat gambar 5.a. Setelah elemen yang bernilai 45 dibawa pada posisi yang tepat maka isi tumpukan akan berubah seperti gambar 5.b.

(20)

Sesuai dengan sifat tumpukan, maka elemen paling atas akan dikerjakan lebih dulu. Sehingga denga melihat gambar 5.b, maka subvektor kanan (dengan batas Kiri = 6 dan batas kanan = 9) akan dikerjakan lebih dulu. Pada saat subvektor ini dikerjakan maka isi tumpukan ini akan dipop. Dengan kata lain pada saat program mengerjakan subvektor sebelah kanan, maka isi tumpukan hanya tinggal sebuah elemen.

9 1 4

6 9

1

kiri kanan kiri kanan a b

Gambar 5. Perubahan isi tumpukan a. Pada saat mulai iterasi

b. Setelah satu elemen ditempatkan

Algoritma QUICKSORT_NON_REKURSIF

[Pengurutan elemen menggunakan metoda non rekursifQuickSort. Masukan dinyatakan sebagai vector A(belum terurutkan),dan N(banyak elemen).Keluaran adalah vector A yang sudah terurut.]

Langkah 0 Baca vector yang akan diurutkan(dalam program utama) dan deklarasikan sebuah tumpukan.

Langkah 1 (Inisialisasikan tumpukan) Tentukan Ujung = 1,

Tumpukan[1].Kiri = 1, dan Tumpuka[1].Kanan = N. Langkah 2 Kerjakan langkah 3 dan 4 sampai Ujung = 0.

Langkah 3 (Menentukan subvektor yang akan dikerjakan,sekaligus mempop elemen teratas tumpukan)

Tentukan : Kr = Tumpukan [Ujung].Kiri, Knn = Tumpuka[Ujung].Kanan,dan Ujung = Ujung – 1.

(21)

Langkah 5 (Mengatur I dan J untuk mulai proses) Tentukan : I = Kr,

J = Knn, dan

Tengah = A[(Kr+Knn) div 2]

Langkah 6 Kerjakan langkah 7 sampai 9 sampai I > J. Langkah 7 (Bergerak dari Kiri ke Kanan)

Tambah nilai I dengan 1 selama A[I] < Tengah. Langkah 8 (Bergerak dari kanan ke kiri)

Kurangi nilai J dengan 1 selama Tengah < A[J]. Langkah 9 Test : apakah I <= J ?

Jika ya,kerjakan langkah-langkah berikut : - Tukarkan A[I] dengan A[J],

- Tambah nilai I dengan 1, - Kurangi nilai J dengan 1. Langkah 10 Tentukan : Knn = J

Langkah 11 Selesai

b. Metoda QuickSort Rekursif

Cara ini bisa dilaksanakan karena sesungguhnya Quick Sort ini terdiri dari 3 langkah, yaitu: penenpatan suatuelemen pada posisinya yang tepat, kemudian mengurutkan subvektor kiri dan subvektor kanan.

Dalam mengurutkan subvektor kiri atau kanan ketiga langkah ini diulang kembali dengan menentukan batas-batas subvektor yang akan diproses.

Batas akhir proses rekursif ditentukan apabila batas kiri subvektor sudah sama dengan atau lebih besar dari batas kanan.

Secara sederhana,metoda ini bisa dituliskan sebagai :

Procedure QUICKSORT ( var A : larik,awal,akhir : integer); Var I,J : integer ;

Begin

If awal < akhir then Begin

ATUR; {*menempatkan suatu elemen pada posisi J *} QUICKSORT(A,awal,J-1); {*memproses subvektor kiri *}

(22)

QUICKSORT(A,J+1,akhir); {*memproses subvektor kanan*} End

End.

Prosedur di atas dalam program utama dipanggil dengan cara : QUICKSORT(A, 1, N );

Dengan A adalah vector yang akan diurutkan, dan N cacah elemen vector.

Dari struktur di atas yang perlu dijelaskan adalah prosedur ATUR yang digunakan untuk menempatkan elemen pertama pada posisinya yang tepat sesuai dengan contoh sebelumnya.

Algoritma ATUR

[Digunakan untuk menempatkan elemen pertama pada posisi J sedemikian rupa sehingga elemen ke 1 sampai elemen ke J-1 selalu lebih kecil dari elemen tersebut, dan elemen ke J+1 sampai ke elemen ke N selalu lebih besar dari elemen tersebut]

Langkah 1 Tentukan : I = Awal + 1. Langkah 2 (Bergerak dari kiri ke kanan )

Tambah nilai I dengan 1 selama A[I] < A[Awal] Langkah 3 (Bergerak dari kanan ke kiri )

Kurangi nilai I dengan 1 selama A[J] > A[Awal]. Langkah 4 Kerjakan langkah 5 sampai 7 selama I < J

Langkah 5 tukarkan nilai A[1] dengan A[J]. Langkah 6 (Bergerak dari kiri ke kanan)

Tambah nilai I dengan 1 selama A[I] < A[awal]. Langkah 7 (Bergerak dari kanan ke kiri )

Kurangi nilai I dengan 1 selama A[J] > A[awal] Langkah 8 Tukarkan nilai A[I] dengan A[J]

(23)

2.2.6 Metode RadixSort

Metode ini didasarkan pada nilai sesungguhnya dari suatu digit pada bilangan yang akan diurutkan. Seperti kita ketahui dalam sistem bilangan desimal, nilai sesungguhnya dari setiap digit akan ditentukan oleh posisi dimana digit itu berada. Sebagai contoh, dalam bilangan 2762 kita katakan bahwa nilai digit dua yang pertama berbeda dengan nilai digit dua yang kedua. Pada bilangan diatas bisa dikatakan bahwa digit 2 (yang pertama) diletakkan pada posisi “ribuan”, digit 7 pada posisi “ratusan”, digit 6 pada posisi “puluhan” dan digit 2 (yang kedua) diletakkan pada posisi “satuan”. Maka pada subbab ini digit yang ditulis paling kiri kita namakan dengan digit signifikan terbesar (most significant digit) disingkat DSB dan yang paling kanan dinamakan digit significant terkecil (least significant digit) disingkat DSK.

Contoh : Data : 342, 547,321, 213, 458, 621, 120, 958, 124, 844 Iterasi pertama Kelompok Data 0 1 2 3 4 5 6 7 8 9 342 547 321 213 458 621 120 958 124 844 120 321 621 342 213 124 844 547 458 958 Hasil 120 321 621 342 213 124 844 547 458 958 Iterasi kedua Kelompok Data 0 1 2 3 4 5 6 7 8 9 120 321 621 342 213 213 120 321 621 342

(24)

124 844 547 458 958 124 844 547 458 958 Hasil 213 120 321 621 124 342 844 547 458 958 Iterasi ketiga Kelompok Data 0 1 2 3 4 5 6 7 8 9 213 120 321 621 124 342 844 547 458 958 120 124 213 321 342 458 547 621 844 958 Hasil 120 124 213 321 342 458 547 621 844 958 Iterasi selesai ……….

Maka data terurut adalah 120, 124, 213, 321, 342, 458, 547, 621, 844, 958

2.2.7 Metode MergeSort

Metode yang akan dijelaskan biasanya disebut dengan metode MergeSort Dua Arah (Two-way MergeSort). Metode ini memanfaatkan keteraturan yang diperoleh dari hasil merging dua buah vektor

Secara singkat dapat dijelaskan sebagai berikut. Vektor masukan dianggap yang mempunyai N eleman dianggap sebagai N buah vektor yang masing-masing terdiri dari sebuah vektor. Untuk setiap pasang vektor kita lakukan proses merging sehingga akan kita peroleh N/2 vektor yang masing-masing terdiri dari 2 elemen (jika N ganjil, akan terdapat sebuah vektor dengan 1 elemen). Kemudian dilakukan merging kembali untuk setiap pasang vektor, sehingga kita peroleh N/4 vektor. Langkah ini kita teruskan sampai kita memperoleh sebuah vektor yang sudah dalam keadaan urut.

(25)

Contoh :

Data yang akan diurutkan adalah:

15 12 45 56 13 10 43 34 56 65 13 10 56 45 12 43 34 15 56 65 12 15 45 56 10 13 34 43 56 65 12 15 45 56 10 13 34 43 56 65 10 12 13 15 34 43 45 56 56 65 10 12 13 15 34 43 45 56 56 65

gambar 1. ilustrasi metode mergesort algoritma yang kita gunakan adalah algoritma merging :

1. input Ca, Cb (banyak elemen pada vektor) 2. inisialisasi i =1, j =1 dan Cc =0

3. repeat

apakah Ai < Bj

ya, CCc = Ai, dan i = i+1 tdk, CCc = Bj, dan j = j+1 until i > Ca atau j > Cb 4. apakah i > Ca ya, untuk k = j ….. Cb Cc = Cc +1 dan CCc = Bk tdk, untuk k = i ….. Ca Cc = Cc + 1 dan CCc = Ak 5. selesai

(26)

2.2.8 Metode Treesort

Metoda treesort adalah suatu metoda yang juga bisa digunakan untuk mengurutkan data. Pada Bab VII Struktur pohon telah dibahas bagaimana menyusun sebuah pohon dan melakukan kunjungan untuk memperoleh informasi yang tersimpan dalam pohon dan sesuai dengan macam kunjungan yang dilakukan. Pada dasarnya dalam pembentukan sebuah pohon perlu diperhatikan kapan suatu simpul akan dipakai sebagai cabang kiri dan kapan sebagai cabang kanan.

Pada makalah ini kami menggunakan salah satu aturan yaitu informasi yang tersimpan pada cabang kiri nilainya selalu lebih kecil dari simpul akar dan informasi yang tersimpan dalam simpul akar nilainya selalu lebih besar dari yang tersimpan pada cabang kanan. Dalam penyusunan pohon ini kita dapat melakukannya dengan kunjungan inorder. Kunjungan inorder ini juga telah dibahas pada struktur pohon yaitu dengan cara :

- kunjungi cabang kiri - kunjungi cabang kanan

- cetak isi simpul yang dikunjungi

Penyusunan (pengurutan) dalam keadaan menaik dapat kita lakukan dengan LRO, dan sebaliknya dalam keadaan menurun dapat dilakukan dengan RLO.

Pada contoh pohon dibawah kami menggunakan kunjungan inorder yang dapat menghasilkan informasi dalam keadaan terurut.

Dari pohon tersebut,didapat urutan yang berisi “ABCDEFGHIJKLMNOPQ” dengan LRO dan akan diperoleh urutan “QPONMLKJIHGFEDCBA”.

G I N H M A K P O C E J B D F Q L

(27)

Gambar

Gambar 3. di atas menunjukkan proses pembagian dari vector menjadi  subvektor-subvektor,subvektor menjadi subvektor dan seterusnya
Gambar 5. Perubahan isi tumpukan             a.  Pada saat mulai iterasi
gambar 1. ilustrasi metode mergesort  algoritma yang kita gunakan adalah algoritma merging :
gambar 9.12. Contoh pohon untuk TreeSort

Referensi

Dokumen terkait

Adapun fungsi-fungsi dari setiap rangkaian, seperti rangkaian Minimum Sistem Mikrokontroller ATMega 16 di gunakan sebagai control otak dari input menuju output yang

(2) Melakukan perbuatan yang bertentangan dengan Peraturan Perundang-undangan yang berlaku, bertentangan dengan norma-norma kehidupan yang berkembang dalam masyarakat, serta

Kegiatan observasi ini bertujuan untuk mengenal, mengetahui, serta mengidentifikasi kondisi lingkungan sekolah, material serta hal lain sebagai penunjang

Bahwa terhadap Terdakwa sebagaimana dalam dakwaan pertama melanggat Pasal 55 ayat (1) ke-2 jo.Pasal 340 KUHP dimana sebagai perbuatan pokoknya adalah tindak pidana

(2) Dalam penyaluran pembiayaan perumahan sebagaimana dimaksud pada ayat (1), Bank atau Perusahaan Pembiayaan memperoleh dana dari Bank Kustodian dan menyerahkan aset berupa

Pemecahan masalah pembelajaran permainan sepak bola di Sekolah Dasar Negeri Penusupan 04 Kecamatan Pangkah Kabupaten Tegal melalui teknik menggiring bola

Untuk jenis bahan baku yang dilihat dari segi kualitasnya akan digunakan oleh perusahaan sesuai dengan spesifikasi pelanggan, misalnya pelanggan meminta harga jual yang murah

Tabel 3.1 Membandingkan tingkat kepentingan elemen-elemen tujuan dibawah ini berdasarkan aktor Pelaku Industri Elemen Tujuan A Elemen Tujuan B Peningkatan Pendapatan