Anda di halaman 1dari 10

ANALISIS WAKTU ALGORITMA QUICKSORT DAN MERGESORT

Oleh : Kris Pradana Waskitha Nala (141401148)


Fakultas Ilmu Komputer Universitas Sumatera Utara

Abstrak
Sistem komputer yang terdiri dari perangkat keras, perangkat lunak dan
perangkat manusia yang saling berinteraksi dan bekerja sama sehingga
mencapai suatu tujuan tertentu. Tujuan yang dimaksud adalah penyelesaian
suatu pekerjaan atau persoalan dan mungkin saja menganalisis suatu peluang.
Peran algoritma dalam perangkat lunak atau pemograman begitu penting,
sehingga perlu memahami konsep dasar algoritma. Begitu banyak logika
pemograman yang telah diciptakan, untuk kasus yang umum dan juga khusus.
Algoritma Quick sort dan merge sort merupakan suatu strategi pengurutan
(indexing) data, yang termasuk pada metode bagi dua dan selesaikan (divideand-conquer). Algoritma dibutuhkan agar suatu permasalahan dapat diselesaikan
dengan lebih efektif dengan sedikit sumber daya yang dilibatkan dan lebih
efisien dengan durasi waktu yang dibutuhkan sedikit (cepat).
Keyword : algoritma, divide and conquer, quick sort dan merge sort.

Pendahuluan
Sejarah kemunculan algoritma sejalan dengan kemunculan teknologi komputer.
Analisis algoritma menjadi topik bahasan utama dalam disiplin ilmu komputer.
Seorang programmer komputer telah lama menggunakan algoritma untuk
diterapkan pada sistem informasi manajemen yang menjalankan fungsi-fungsi
akuntansi perusahaan yang disebut sistem pemrosesan transaksi (transaction
information system) atau sistem pemrosesan data secara elektronik (Electronic
Data Processing/EDP), yang kemudian berkembang menjadi sistem pendukung
pengambilan keputusan (Decision Support System/DSS).

Algoritma adalah kumpulan instruksi yang dibuat secara jelas terhadap


penyelesaian suatu masalah. Kumpulan instruksi yang dimaksud dibangun dari
suatu bahasa pemograman yang dimengerti oleh komputer. Kumpulan instruksi
tersebut berupa tahapan-tahapan atau langkahlangkah untuk menyelesaikan
suatu pekerjaan atau penyelesaian suatu masalah secara lebih efektif dengan
sedikit sumber daya yang dilibatkan dan lebih efisien dengan durasi waktu yang
dibutuhkan sedikit (cepat). Secara bebas, kita menganggap algoritma kurang
lebih sama dengan suatu prosedur yang sering dikerjakan atau dilakukan seharihari.
Contohnya adalah memasak beras, langkah-langkahnya adalah sebagai berikut:
ambil tempat menanak nasi, masukkan beras secukupnya kedalam tempat tadi,
bersihkan dan masukkan air sesuai takaran, masukkan kedalam magic jar,
colokkan ke listrik dan tekan tombolnya. Contoh lain ketika kita hendak
mengendarai sepeda motor, tahapan-tahapan yang kita lakukan adalah
memeriksa posisi kendaraan, melihat ban, memeriksa kunci, menghidupkan
mesin dan jalan. French,C.S. (1984) menyatakan sejumlah konsep yang
mempunyai relevansi dengan masalah rancangan program yaitu kemampuan
komputer, kesulitan dan ketepatan. Penerapan dari konsep tersebut biasanya
digunakan dalam rancangan algoritma.
Dalam merancang sebuah algoritma, Fletcher (1991) memberikan beberapa
cara atau metode yaitu kumpulan perintah, ekspresi, tabel instruksi, program
komputer, kode semu dan flow chart, sedangkan Knuth (1973) menyarankan
algoritma fundamental yaitu input, proses dan output. Dalam analisis algoritma
terdapat bagian-bagian yang dapat dianalisis, yaitu kecepatan waktu, kapasitas
biaya dan kapasitas ruang. Ketiganya menggunakan notasi O (big O). Divide
and Conquer adalah metode pemecahan masalah yang bekerja dengan membagi
masalah (problem) menjadi beberapa submasalah (sub-problem) yang lebih
kecil, kemudian menyelesaikan masing-masing sub-masalah secara independen,
dan akhirnya menggabungkannya. Algoritma quicksort dan mergesort
diaplikasikan dengan cara membagi tabel menjadi bagian kiri dan bagian kanan,

perulangan dilakukan secara rekursif (reccurent). Kemudian menggabungkan


hasil pengurutan masing-masing bagian menjadi tabel semula yang sudah
terurut.
Proses pembagiannya mudah karena hanya memerlukan proses pembagian
biasa. Akan tetapi proses penggabungannya menjadi sulit karena unsur-unsur
pada tabel kecil belum tentu terurut sehingga pada setiap tahap penggabungan,
harus terus dilakukan pembandingan dan pengurutan kembali. Algoritma
pengurutan (sorting algorithm) adalah algoritma yang menyimpan suatu list
pada suatu urutan tertentu, biasanya membesar atau mengecil, biasanya
digunakan untuk mengurutkan angka ataupun huruf. Efisiensi pada pengurutan
ini diperlukan untuk mengoptimalkan kecepatan pemrosesan. Semakin efisien
suatu algoritma, maka pada saat dieksekusi dan dijalankan akan menghabiskan
waktu yang lebih cepat dan bisa menerima lebih banyak masukan dari user.
Terdapat banyak algoritma pengurutan yang sudah dibuat seperti selection sort,
shell sort, heapsort, bubble sort, insertion sort, radix sort, quicksort, dan
mergesort. Yang menjadi domain pada kesempatan ini adalah mencoba untuk
menganalisis kecepatan waktu dari algoritma quicksort dan mergesort, dengan
sekali inputan data berupa bilangan bulat (integer) dalam suatu list atau array
secara acak (random).

Konsep Dasar Algoritma Quicksort


Algoritma quicksort pertama kali dibuat oleh C.A.R.Hoare tahun 1960. Pada
masalah penyortingan (sorting) data bilangan bulat (integer) secara terindeks
pada suatu list atau array dari bilangan yang paling besar sampai ke bilangan
yang paling kecil atau sebaliknya. Tidak hanya dapat diterapkan pada
pengindeksan bilangan saja, namun juga untuk pengindeksan huruf (abjad) dari
A ke Z atau sebaliknya.

Algoritma ini sangat baik diterapkan pada kasus pengindeksan kumpulan


kata(library sort utility)atau kumpulan bilangan atau kombinasinya. Algoritma
ini mengikuti langkah langkah sebagai berikut :
1. Divide :
Memilah rangkaian data menjadi dua sub-rangkaian A[pq-1] dan A[q+1
r] dimana setiap unsur A[pq-1] adalah kurang dari atau sama dengan A[q]
dan setiap unsur pada A[q+1r] adalah lebih besar atau sama dengan unsur
pada A[q]. A[q] disebut sebagai unsur pivot. Perhitungan pada unsur q
merupakan salah satu bagian dari prosedur pemisahan.
2. Conquer :
Mengurutkan unsur pada subrangkaian secara rekursif Pada algoritma
quicksort, langkah kombinasi tidak di lakukan karena telah terjadi
pengurutan unsur unsur pada sub-array. Quicksort termasuk pada
pendekatan sulit membagi, mudah menggabung (hard split/easy join). Cara
pemilihan pivot:
1) Pivot = unsur pertama/unsur terakhir/unsurtengah tabel
2) Pivot dipilih secara acak dari salah satuan surtabel. Pivot
=unsurmedian table

Kompleksitas Waktu Quicksort


A. Kasus terbaik (best case) terjadi bila
pivot

adalah

unsur

median

sedemikian sehingga kedua tabel


berukuran relatif sama setiap kali
pempartisian di suatu bilangan acak.
Didapatkan

kompleksitas

waktunya

Sehingga menjadi bentuk yang lebih sederhana :

adalah

B. Kasus terburuk (worst case) terjadi bila pada setiap partisi pivot selalu
terpilih unsur maksimum atau unsur minimumnya. Kasus ini terjadi jika

tabel

sudah

terurut

menaik/menurun
Didapatkan kompleksitas waktunya
adalah

Sehingga menjadi bentuk yang lebih sederhana :

C. Kasus rata-rata (average case) terjadi jika pivot dipilih secara acak dari
unsur tabel, dan peluang setiap unsur dipilih menjadi pivot adalah sama.
Rata-rata jumlah tingkatan perbandingan diatas semua permutasi urutan
masukan dapat diperkirakan dengan teliti dengan pemecahan hubungan
perulangan

Implementasi Quicksort
Penerapan algoritma quicksort menggunakan antar muka bahasa pemograman
berbasis visual yaitu visual basic 6.0 dengan kumpulan perintah seperti dibawah
ini:
PublicSubQuicksort
(list()AsInteger,ByValminAsLong,ByValmaxAs
Long)
Dimmed_valueAsLong
DimhiAsLong
DimloAsLong
DimiAsLong
Ifmin>=maxThenExit
Subi=Int((maxmin+1)*Rnd+min)
med_value=list(i)list(i)=list(min)
lo=min
hi=max
DoWhilelist(hi)>=med_value
hi=hi1
Ifhi<=loThenExit
DoLoop
Ifhi<=loThenlist(lo)=med_value
ExitDoEnd
Iflist(lo)=list(hi)
lo=lo+1
DoWhilelist(lo)<med_value
lo=lo+1
Iflo>=hiThenExit
DoLoopIflo>=hiThen
lo=hilist(hi)=med_value
ExitDoEnd
Iflist(hi)=list(lo)
Loop Quicksort list(), min, lo1 Quicksort
list(),lo+1,maxEndSub

Konsep Dasar Algoritma Mergesort


Deskripsi dari algoritma ini dirumuskan dalam 3 langkah berpola divideand-conquer. Berikut adalah penjelasan langkah kerja dari merge sort.
1. Divide : Memilah unsur unsur dari rangkaian data menjadi dua bagian.

2. Conquer : Setiap bagian dengan memanggil prosedur mergesort secara


rekursif .
3. Kombinasi : Mengkombinasikan dua bagian tersebut secara rekursif untuk
mendapatkan rangkaian data berurutan.
Proses rekursi berhenti jika mencapai unsur dasar. Hal ini terjadi bilamana
bagian yang akan diurutkan menyisakan tepat satu unsur. Sisa pengurutan satu unsur
tersebut menandakan bahwa bagian tersebut telah terurut sesuai rangkaian.
Mergesort termasuk pada pendekatan mudah membagi, susah menggabung (easy
split/ hard join).

Kompleksitas Waktu Mergesort


A. Kasus terbaik (best case) terjadi apabila data
sudah terurut, sehingga pada saat kombinasi tidak
perlu mengurutkan kembali.
Didapatkan kompleksitas waktunya adalah :

Sehingga menjadi bentuk yang lebih sederhana :

B. Kasus terburuk (worst case) terjadi bila


data terkondisi seperti pada gambar
berikut.
Didapatkan

kompleksitas

waktunya

adalah :

Sehingga menjadi bentuk yang lebih sederhana :

Implementasi Mergesort
Penerapan

algoritma

mergesort

menggunakan

antar

muka

bahasa

pemograman berbasis visual yaitu visual basic 6.0 dengan kumpulan perintah
seperti dibawah ini:
PublicSubMerge(list()AsInteger,ByValbawahAs
Long,ByValtengahAsLong,ByValatasAsLong)
Dimtemp_array()AsInteger
DimtempAsInteger
DimvektorAAsLong
DimvektorBAsLong
DimvektorUtamaAsLong
ReDimtemp_array(bawahToatas)
CopyMemorytemp_array(bawah),

list(bawah),(atasbawah+1)*Len(list(bawah))
vektorA=bawah
vektorB=tengah+1
vektorUtama=bawah
DoWhile(vektorA<=tengah)And(vektorB<=atas)
If(temp_array(vektorA)<=temp_array(vektorB))Then
list(vektorUtama)=temp_array(vektorA)
vektorA=vektorA+1
Elselist(vektorUtama)=temp_array(vektorB)
vektorB=vektorB+1
EndIf
vektorUtama=vektorUtama+1
LoopIfvektorA<=tengahThen
CopyMemorylist(vektorUtama),
temp_array(vektorA),
(tengahvektorA+1)*Len(list(bawah))
EndIf
IfvektorB<=atasThen
CopyMemorylist(vektorUtama),
temp_array(vektorB),
(atasvektorB+1)*Len(list(bawah))
EndIf
EndSub

Public Sub MergeSort(list() As Integer, ByVal


first_indexAsLong,ByVallast_indexAsLong)
DimtengahAsLong
If(last_index>first_index)Then
tengah=(first_index+last_index)\2
MergeSortlist,
first_index,
tengahMergeSortlist,
tengah+1,
last_index Merge list, first_index, tengah,
last_index
EndIf
EndSub

Pembahasan
Walaupun tiap algoritma pengurutan menawarkan perbedaan metode dan
sudut pandang penyelesaian masalah yang berbeda, namun kompleksitas waktu
yang dibutuhkan tetap menjadi masalah utama yang harus menjadi pertimbangan
untuk menentukan algoritma mana yang lebih baik dan tepat untuk digunakan.
Untuk mengetahui kecepatan waktu tiap algoritma, maka digunakan perangkat
lunak penghitung kecepatan algoritma dalam bahasa pemograman visual basic.
Hal ini digunakan untuk mendukung analisis kecepatan sorting data. Dengan
mengatur perangkat lunak agar banyaknya jumlah n sesuai yang diinput secara acak,
sehingga kemunculan data setiap kali program dijalankan tidak sama dan tidak
dapat diprediksidan interval data antara 100 10000. Pengujian dilakukan disebuah
laptop dengan spesifikasi : platform Windows XP Profesional, processor AMD
2.2 GHz, dan 1GB DDR2 RAM.

Penutup
Pembuatan program komputer tidak terlepas dari algoritma, apalagi program
yang dibuat sangat kompleks. Program dapat dibuat dengan mengabaikan algoritma,
akan tetapi program tersebut memiliki akses yang lambat atau bahkan sangat lambat
dan memakai memori yang banyak. Dalam menguji suatu algoritma, dibutuhkan

beberapa kriteria untuk mengukur efisiensi algoritma, kriterianya adalah memeriksa


kebenaran algoritma dengan cara matematis dan menyederhanakannya. Dari
paparan yang telah dikemukakan diatas, maka dapat dikatakan bahwa algoritma
quicksort sesuai dengan namanya, lebih cepat jika dibandingkan dengan
mergesort, untuk data bilangan bulat (integer) dari interval10010000.

Daftar Bacaan
[1] Anonim.Ready-to-Run Visual Basic Algorithms, Second Edition.
http://www.vbhelper.com/vba.htm,diakses 10 Nopember 2008.
[2] Brassard G. and Bratley P., Fundamentals of Algorithmics. Prentice
Hall, NewJersey, 1996.
[3] Munir, Rinaldi. Algoritma Divide and Conquer. Institut Teknologi
Bandung. Bandung2004.
[4] Sedgewick, Robert. Algorithms. Addison Wesley Publishing Company.
1983.

Anda mungkin juga menyukai