Anda di halaman 1dari 9

Algoritma Quicksort

Quicksort merupakan Algoritma Pembagi. Pertama sekali quicksort


membagi list yang besar menjadi dua buah sub list yang lebih kecil:
element kecil dan element besar. Quicksort kemudian dapat menyortir
sub list itu secara rekursif.
Langkah-Langkah pengerjaannya ialah:
1. Ambil sebuah elemen yang disebut dengan pivot pada sebuah
daftar.
!. "rutkan kembali sebuah list sehingga elemen dengan nilai yang
kecil dari pi#ot berada sebelum pi#ot sedangkan seluruh element
yang memiliki nilai yang lebih besar dari pi#ot berada setelahnya
$nilai yang sama dapat berada pada pi#ot setelahnya%. &etelah
pemisahan pi#ot berada pada posisi akhirnya. 'perasi ini
disebut Partition.
(. &ub list kemudian disortir secara recursif dari elemen yang lebih
kecil dan sub list dari elemen yang lebih besar.
)asus dasar dari rekusrif ialah list dari besaran nol atau satu yang tidak
perlu untuk di sorting.
"ntuk meyakinkan paling banyak ruang '$log *% digunakan pertama
sekali algoritma melakukan rekursif pada bagian array yang lebih kecil
dan menggunakan pemanggilan ekor untuk merekursif yang lainnya.
function quicksort$array +left+ +right+%

// If the list has 2 or more items
if +left+ , +right+

// See "Choice of pivot" section below for possible choices
choose any +pi#ot-nde.+ such that +left+ / +pi#ot-nde.+ / +right+

// Get lists of bigger and smaller items and final position of pivot
+pi#ot*e0-nde.+ :1 partition$array +left+ +right+ +pi#ot-nde.+%

// Recursivel sort elements smaller than the pivot
quicksort$array +left+ +pi#ot*e0-nde.+ - 1%

// Recursivel sort elements at least as big as the pivot
quicksort$array +pi#ot*e0-nde.+ 2 1 +right+%
3ontoh quicksort:
Algoritma Mergesort
Prinsip utama yang diimplementasikan pada algoritma urut gabung
seringkali disebut sebagai pecah!belah dan ta"lu""an $bahasa -nggris:
divide and con#uer%. 3ara kerja algoritma urut gabung adalah
membagi larik data yang diberikan menjadi dua bagian yang lebih kecil.
)edua larik yang baru tersebut kemudian akan diurutkan secara terpisah.
&etelah kedua buah list tersusun maka akan dibentuk larik baru sebagai
hasil penggabungan dari dua buah larik sebelumnya. 4enurut
keefektifannya alogaritma ini bekerja dengan tingkat
keefektifan '$nlog$n%%. 5alam bentuk pseudocode sederhana algoritma
ini dapat dijabarkan sebagai berikut:
6 'riginal data is on the input tape7 the other tapes are blank
function merge8sort$input8tape output8tape scratch8tape83
scratch8tape85%
while any records remain on the input8tape
while any records remain on the input8tape
merge$ input8tape output8tape scratch8tape83%
merge$ input8tape output8tape scratch8tape85%
while any records remain on 3 or 5
merge$ scratch8tape83 scratch8tape85 output8tape%
merge$ scratch8tape83 scratch8tape85 input8tape%
6 take the ne.t sorted chunk from the input tapes and merge into the
single gi#en output8tape.
6 tapes are scanned linearly.
6 tape9ne.t: gi#es the record currently under the read head of that tape.
6 tape9current: gi#es the record pre#iously under the read head of that
tape.
6 $;enerally both tape9current: and tape9pre#ious: are buffered in
<A4 ...%
function merge$left9: right9: output8tape9:%
do
if left9current: / right9current:
append left9current: to output8tape
read ne.t record from left tape
else
append right9current: to output8tape
read ne.t record from right tape
while left9current: , left9ne.t: and right9current: , right9ne.t:
if left9current: , left9ne.t:
append current8left8record to output8tape
if right9current: , right9ne.t:
append current8right8record to output8tape
return
3ontoh penerapan atas sebuah larik sebagai data sumber yang akan diurutkan {3, 9, 4,
1, 5, 2} adalah sebagai berikut:
Larik tersebut dibagi menjadi dua bagian {3, 9, 4} dan {1, 5, 2}
)edua larik kemudian diurutkan secara terpisah sehingga menjadi {3, 4,
9} dan {1, 2, 5}
&ebuah larik baru dibentuk yang sebagai penggabungan dari kedua larik
tersebut {1} sementara nilai-nilai dalam masing larik {3, 4, 9} dan {2, 5} $nilai 1
dalam elemen larik ke dua telah dipindahkan ke larik baru%
langkah berikutnya adalah penggabungan dari masing-masing larik ke dalam
larik baru yang dibuat sebelumnya.
{1, 2} ,-= {3, 4, 9} dan {5}
{1, 2, 3} ,-= {4, 9} dan {5}
{1, 2, 3, 4} ,-= {9} dan {5}
{1, 2, 3, 4, 5} ,-= {9} dan {null}
{1, 2, 3, 4, 5, 9} ,-= {null} dan {null}
3ontoh lain mergesort :
Algoritma Backtracking untuk Pewarnaan Graf
"ntuk menyelesaikan persoalan pe0arnaan graf kita perlu membuat sebuah
matriks ketetanggaan ;<AP>91..n:91..n: yang merupakan matri. of boolean.
;<AP>$-j% bernilai true jika simpul i dan j bertetangga dan bernilai false jika
sebaliknya. 4atri. of boolean lebih direkomendasikan karena algoritma lebih
mementingkan apakah kedua simpul bertetangga atau tidak. ?enis 0arna atau
bilangan kromatik direpresentasikan dengan tipe bilangan 1!@m dan solusi
akan direpresentasikan dengan n-tuple AB$1%B$!%@B$n%C dimana B$i% bernilai
bilangan 0arna dari simpul i.
procedure 43'L'<-*;$k%
DDk adalah indeks selanjutnya dari simpul DDyang akan
diberi 0arna
global integer mnB$1..n%
boolean ;<AP>91..n:91..n:
integer k
loop DDbangkitkan semua kemungkinan untuk B$k%
call *EBFGAL"E$k% DDset B$k% dengan 0arna yang memungkinkan
if $B$k%1H% then e.it DD0arna sudah habis
endif
if $k1n%
then print$B%
else call 43'L'<-*;$k21%
endif
repeat
end 43'L'<-*;
procedure *EBFGAL"E$k%
global integer mnB$1..n%
boolean ;<AP>91..n:91..n:
integer jk
loop
B$k%-$B$k%21% mod $m21% DD0arna berikutnya
-f $B$k%1H% then
return endif DD0arna sudah habis
for $j11 to n % do
if $;<AP>$kj% and $B$k%1B$j%%%
DDjika $kj% adalah sebuah sisi dengan
DDsimpul a0al dan akhir ber0arna sama
then e.it
endif
if j1n21 then
return endif
repeat
end *EBFGAL"E
Algoritma Sum of Subset
P<'3E5"<E &"4'I&"J$skr%
;L'JAL -*FE;E< 4n
;L'JAL <EAL K$1:n%
;L'JAL J''LEA* B$1:n%
<EAL rs7 -*FE;E< kj
B$k% 1 1
-I s 2 K$k% 1 4 F>E* P<-*F $B$j%j L1 F' k%
EL&E
-I s 2 K$k% 2 K$k21% /4 F>E*
3ALL &"4'I&"J$s2K$k% k21 r-K$k%%
E*5-I
E*5-I
-I s 2 r - K$k% M4 A*5s 2 K$k% /4 F>E*
B$k% H
3ALL &"4'I&"J$s k21 r-K$k%%
E*5-I
E*5 &"4'I&"J
3ontoh :
&uatu himpunan terdiri dari N bilangan yakniAO 1H 1! 1( 1O 1PC yang disusun
secara tidak turun. Akan ditentukan himpunan-himpunan bagiannyayang jumlah
seluruh elemennya adalah (H.
Perhatikan simpul A J dan 3 yang merupakan outputnya dalam bentuk tuple
$11HH1% $1H11% dan $HH1HH1%.