QUICKSORT: METODE PENGURUTAN ARRAY SATU DIMENSI YANG CEPAT DAN EFISIEN. (Quicksort: Quick and Efficient One-Dimension Array Sorting Method)

dokumen-dokumen yang mirip
BAB I PENDAHULUAN Latar Belakang

ANALISIS PERBANDINGAN ALGORITMA BUBBLE SORT, MERGE SORT, DAN QUICK SORT DALAM PROSES PENGURUTAN KOMBINASI ANGKA DAN HURUF

Analisis Kompleksitas Waktu Untuk Beberapa Algoritma Pengurutan

Sorting Algorithms. Divide and Conquer

Sorting Algorithms. Algoritma dan Struktur Data. Sorting algorithms

Quick Sort dan Merge Sort. Arna Fariza Yuliana Setiowati

Komparasi Algoritma Quicksort dan Bucket Sort pada Pengurutan Data Integer Dengan Menggunakan Bahasa Pemrograman Java, C++ dan VB.

Komparasi Algoritma Quicksort dan Bucket Sort pada Pengurutan Data Integer

STRATEGI DIVIDE AND CONQUER

Analisis Kecepatan Sorting Dengan Notasi Big O

Studi Mengenai Perbandingan Sorting Algorithmics Dalam Pemrograman dan Kompleksitasnya

Outline STRUKTUR DATA. VII. Sorting

Penerapan Algoritma Bucket Sort Untuk melakukan Pengurutan n buah Bilangan Mata Kuliah Pemrosesan Paralel

TELAAH WAKTU EKSEKUSI PROGRAM TERHADAP KOMPLEKSITAS WAKTU ALGORITMA BRUTE FORCE DAN DIVIDE AND CONQUER DALAM PENYELESAIAN OPERASI LIST

BAB 1 PENDAHULUAN. Universitas Sumatera Utara

SORTING DENGAN ALGORITMA DIVIDE AND CONQUER

Sorting. Selection Sort. Straight insertion Sort. Merge Sort Paradigma Divide-and-Conquer. Quicksort

Pengertian Algoritma Pengurutan

Perbandingan Algoritma Pengurutan Merge Sort, Quick Sort dan Heap Sort Dilihat dari Kompleksitasnya

Modul Praktikum 6 Pemograman Berorientasi Objek

Perbandingan Algoritma Pencarian Kunci di dalam Himpunan Terurut Melalui Linear Search dan Binary Search

Algoritma Heap Sort. Sekolah Teknik Elektro & Informatika Departemen Teknik Informatika, Institut Teknologi Bandung Jl. Ganesha 10, Bandung

SORTING (BAGIAN II) Proses kelima

Design and Analysis Algorithm. Ahmad Afif Supianto, S.Si., M.Kom. Pertemuan 07

STRUKTUR DATA. Nama : Sulfikar Npm : STMIK Handayani Makassar

Sorting. Struktur Data dan Algoritma. Suryana Setiawan, Ruli Manurung & Ade Azurat (acknowledgments: Denny) Fasilkom UI

Multithreading untuk Algoritma Divide and Conquer

Bab Tujuan. 6.2 Insertion Sort

Kompleksitas Algoritma Sorting yang Populer Dipakai

PENERAPAN TEORI GRAF UNTUK MENYELESAIKAN MASALAH MINIMUM SPANNING TREE (MST) MENGGUNAKAN ALGORITMA KRUSKAL

Kompleksitas Algoritma Dalam Algoritma Pengurutan

Solusi UTS Stima. Alternatif 1 strategi:

ANALISIS PERBANDINGAN METODE ALGORITMA QUICK SORT DAN MERGE SORT DALAM PENGURUTAN DATA TERHADAP JUMLAH LANGKAH DAN WAKTU

Heap Tree dan Kegunaannya dalam Heap Sort

Pohon Biner Sebagai Struktur Data Heap dan Aplikasinya

Perbandingan Performa Kombinasi Algoritma Pengurutan Quick-Insertion Sort dan Merge-Insertion Sort

Perbandingan Performa Algoritma Greedy dan Dynamic Programming

ANALISIS ALGORITMA QUICKSORT

Decrease and Conquer

PENGGUNAAN ALGORITMA DIVIDE AND CONQUER UNTUK OPTIMASI KONVERSI BILANGAN DESIMAL KE BINER

Gambar 13.1 Ilustrasi proses algoritma sorting

Analisa Kompleksitas Algoritma. Sunu Wibirama

Analisis Algoritma. Jimmy Tirtawangsa. Universitas Telkom 2014

Algoritma Bubble Sort dan Quick Sort

PROGRAM STUDI S1 SISTEM KOMPUTER UNIVERSITAS DIPONEGORO. Oky Dwi Nurhayati, ST, MT

Perbandingan Kecepatan/Waktu Komputasi Beberapa Algoritma Pengurutan (Sorting)

Kompleksitas Algoritma Pengurutan Selection Sort dan Insertion Sort

STRUKTUR DATA SORTING ARRAY

APLIKASI PERENCANA BELANJA DENGAN PENGURUTAN SKALA PRIORITAS BERBASIS ANDROID

ALGORITMA PENGURUTAN. Oleh : S. Thya Safitri, MT

Implementasi Metode Jumlah Riemann untuk Mendekati Luas Daerah di Bawah Kurva Suatu Fungsi Polinom dengan Divide and Conquer

Pengelompokan Organisme Dengan Menggunakan Algoritma Kruskal

Langkah Awal menuju Analisis Kompleksitas Algoritma

Objectives. Struktur Data & Algoritme (Data Structures & Algorithms) Sort. Outline. Bubble Sort: idea. Bubble Sort. Sorting

Algoritma dan Struktur Data. Algoritma Pengurutan (Sorting)

JURNAL TEKNOLOGI INFORMASI & PENDIDIKAN ISSN : VOL. 6 NO. 1 Maret 2013

Analisis Kemangkusan Algoritma Pengurutan Quicksort

Analisis dan Strategi Algoritma

SILABUS MATAKULIAH. Indikator Pokok Bahasan/Materi Aktifitas Pembelajaran

Penyelesaian Barisan Rekursif dengan Kompleksitas Logaritmik Menggunakan Pemangkatan Matriks

Algoritma Sorting. Ahmad Kamsyakawuni, S.Si, M.Kom. Jurusan Matematika Fakultas Matematika dan Ilmu Pengetahuan Alam Universitas Jember

MENYIGI PENGGUNAAN METODE SHELLSORT DALAM PENGURUTAN DATA

APLIKASI PENERJEMAH KALIMAT BAHASA INDONESIA KE BAHASA SIMALUNGUN DENGAN ALGORITMA BERRY - RAVINDRAN

Perbandingan Algoritma Brute Force, Divide and conquer, dan Dynamic Programming untuk Solusi Maximum Subarray Problem

Variasi Pohon Pencarian Biner Seimbang

EVALUASI KINERJA ALGORITMA PERKALIAN MATRIKS BERANTAI DENGAN TEKNIK DYNAMIC PROGRAMMING

Algoritma Sorting (Selection Insertion)

Pencarian Jalan untuk Menghasilkan Skor Tertinggi pada Permainan Voracity

Algoritma Divide and Conquer

Perancangan Website Ujian. Teknik Elektro UNDIP Berbasis HTML

Komputasi Paralel Sebagai Alternatif Solusi Peningkatan Kinerja Komputasi

APLIKASI SIMULASI PENGURUTAN DATA MENGGUNAKAN ALGORITMA HEAP SORT

Sorting Algorithms. Definisi

BAB 2 LANDASAN TEORI

BAB VII ALGORITMA DIVIDE AND CONQUER

Penggunaan Metode Binary Search Pada Translator Bahasa Indonesia Bahasa Jawa

BAB 2 LANDASAN TEORI

2. Mahasiswa dapat membuat dan menggunakan array dan linked list dalam suatu kasus.

BAB 3 ANALISA SISTEM

Data Structure SORTING. Chapter 11. Dahlia Widhyaestoeti, S.Kom

STRUKTUR DATA (3) sorting array. M.Cs

BAB II TINJAUAN PUSTAKA

Algoritma Pengurutan Data Kompleksitas dan Penerapannya

SORTING ARRAY FAKULTAS TEKNOLOGI INFORMASI UNISBANK SEMARANG : ANDY KRISTIANTO : Disusun Oleh :

Algoritma dan Pemrograman Lanjut. Pertemuan Ke-8 Pengurutan (Sorting) 1

Pemodelan dan Analisa

Pengantar Teknik Informatika

BAB 2 TINJAUAN PUSTAKA

Penerapan Pohon Dalam Heap Sort

BAB VI SORTIR ATAU PENGURUTAN

MAKALAH ALGORITMA DIVIDE AND CONQUER

ANALISIS ALGORITMA BINARY SEARCH

SATUAN ACARA PERKULIAHAN PERANCANGAN DAN ANALISIS ALGORITMA ** (S1/TEKNIK INFORMATIKA) PTA 2010/2011

Algoritma dan Struktur Data. Searching dan Sorting

Penerapan Struktur Data Pohon dalam Implementasi Algoritma Heapsort dan Tinjauan Kompleksitas Waktunya

Bubble Sort dan Shell-Sort. Yuliana Setiowati

Algoritme dan Pemrograman

VISUALISASI PENCARIAN LINTASAN TERPENDEK ALGORITMA FLOYD- WARSHALL DAN DIJKSTRA MENGGUNAKAN TEX

BAB 1 PENDAHULUAN Latar Belakang

BAB I PENDAHULUAN.

Transkripsi:

1 QUICKSORT: METODE PENGURUTAN ARRAY SATU DIMENSI YANG CEPAT DAN EFISIEN (Quicksort: Quick and Efficient One-Dimension Array Sorting Method) Muhammad Saiful Islam Program Studi D-IV Teknik Informatika Departemen Teknik Komputer dan Informatika Politeknik Negeri Bandung Jln. Gegerkalong Hilir, Ds. Ciwaruga, Bandung 40559 muhammad.saiful.tif414@polban.ac.id Abstrak Pengurutan data sangat sering dilakukan dalam dunia komputasi. Keperluan-keperluan yang membutuhkan pengurutan data begitu banyak sehingga perlu dicari metode pengurutan data yang dapat bekerja dengan cepat dan efisien, dan Quicksort adalah salah satunya. Paper ini menunjukkan seberapa cepat dan efisien Quicksort bekerja, dan menunjukkan isu-isu penting yang muncul dalam proses implementasi Quicksort. Beberapa improvisasi pun masih dapat dilakukan untuk meningkatkan performa Quicksort, sehingga menjadikan Quicksort sebagai pilihan implementasi dari berbagai system sort yang ditemukan dalam berbagai bahasa pemrograman serta digunakan untuk menyelesaikan berbagai persoalan pengurutan data. Kata kunci: Pengurutan data, Quicksort, optimasi kode, analisis algoritma Abstract Data sorting is one of the most used routine in computation world. There are so many activities that involve data sorting. Because of that, there is a need to find data sorting method that performs quickly and efficiently, and Quicksort is one of them. This paper shows how quick and efficient Quicksort is, and shows important issues that arise in implementing Quicksort. Several improvements still also be made to improve the performance of Quicksort, thus making Quicksort as a choice in system sort implementation found in various programming language and used to solve various data sorting problems. Key words: Data sorting, Quicksort, code optimization, analysis of algorithm PENDAHULUAN Proses transaksi perbankan, pendaftaran mahasiswa, pengelolaan karyawan, dan pengumpulan nilai mahasiswa adalah contoh kecil yang menunjukkan kumpulan data yang sering dijumpai manusia dalam kehidupan sehari-hari. Kumpulan data ini sering dijumpai dalam kondisi terurut, entah itu terurut secara numerik ataupun terurut secara leksikografis (urutan kamus). Kejadian tersebut menunjukkan bahwa dalam era komputasi seperti saat ini, akan sangat sering komputer diminta melakukan pengurutan terhadap sekumpulan data. Isu pengurutan ini kemudian menjadi bahan analisis dari para akademisi dan ilmuwan untuk menciptakan metode pengurutan data yang efisien dan tangguh, sehingga dapat diandalkan untuk mengurutkan sekumpulan data yang diterima oleh komputer.

2 Tugas MK Dasar-dasar Pemrograman 2014/2015 DIVIDE-AND-CONQUER Suatu permasalahan yang cukup besar bisa diselesaikan dengan pendekatan divide-andconquer. Divide-and-conquer menyelesaikan masalah menggunakan metode rekursif. Pada setiap pemanggilan fungsi rekursif, ada tiga hal yang dilakukan (Cormen, et al., 2009): 1. Membagi (divide) permasalahan yang dihadapi ke dalam beberapa subproblems yang lebih kecil, namun masih mengandung permasalahan yang sama; 2. Menyelesaikan (conquer) sub-problem secara rekursif. Jika ukuran sub-problem sudah cukup untuk diselesaikan, maka lakukan penyelesaian masalah; 3. Gabungkan (combine) solusi untuk subproblems yang ada untuk mendapatkan solusi global. Jika terdapat permasalahan yang masih cukup besar untuk diselesaikan secara langsung sehingga harus diselesaikan secara rekursif, maka permasalahan itu disebut sebagai recursive case. Namun, jika permasalahan yang ada sudah cukup untuk diselesaikan secara langsung, maka permasalahan itu disebut sebagai base case. Recursive case akan terus dipecah menjadi sub-problems yang lebih kecil sehingga ditemui base case untuk menyusun solusi global. PENGURUTAN DATA Pengurutan data (atau lebih sering disebut dengan sorting) adalah proses membuat permutasi dari sekumpulan data sehingga kumpulan data tersebut berada dalam suatu urutan yang logis. Pada awal era komputasi, 30% pekerjaan yang dilakukan oleh komputer berhubungan dengan proses pengurutan data (Sedgewick & Wayne, 2011). Angka 30% ini begitu besar karena pada penggunaan komputer sehari-hari, hampir setiap operasi yang dilakukan oleh pengguna melibatkan proses pengurutan data. Ketika pengguna membuka Windows Explorer, misalnya, berkas yang ditampilkan di layar langsung terurut berdasarkan jenisnya (berkas atau folder), kemudian terurut secara bsekumpulan tweets yang terurut berdasarkan waktu penulisannya. Selain itu, pengurutan data merupakan salah satu masalah fundamental dalam suatu algoritma, dengan alasan-alasan (Cormen, et al., 2009): Ada program-program komputer yang memang memerlukan proses pengurutan data secara eksplisit karena business process-nya mengharuskan demikian. Pengurutan data memegang peranan penting dalam beberapa jenis algoritma. Contohnya, perangkat lunak yang melakukan proses graphic rendering yang memiliki beberapa layer perlu melakukan pengurutan layer-layer tersebut, sehingga rendering akan dilakukan dari layer terbawah hingga layer teratas. Beberapa teknik pemrograman dan ideide pemecahan masalah baru ditemukan ketika algoritma pengurutan data dikembangkan. Analisis suatu algoritma pengurutan data dapat dilakukan hingga muncul kesimpulan apakah algoritma pengurutan data ini optimal, baik dalam kasus terburuk maupun dalam kasus terbaik. Banyak isu yang muncul ketika implementasi suatu perangkat lunak dapat diselesaikan dengan analisis mendalam pada level desain, bukan memperbaiki kode program pada level implementasi. Beberapa algoritma pengurutan data yang dikenal dalam dunia komputasi adalah insertion sort, merge sort, heapsort, quicksort, counting sort, radix sort, dan bucket sort. QUICKSORT Algoritma Quicksort dibuat oleh C. A. R. Hoare dan merupakan salah satu metode pengurutan data yang paling efisien jika dibandingkan dengan metode yang lain (Khreisat, 2007). Algoritma ini mudah diimplementasikan, mampu diterapkan untuk hampir berbagai jenis tipe data, dan relatif bekerja lebih ringan jika dibandingkan dengan metode yang Iain. Quicksort adalah jenis algoritma divide-andconquer. Untuk mengurutkan sekelompok elemen pada array A, yang dilakukan metode ini adalah (Hoare, 1961): 1. Melakukan partisi terhadap array A, sehingga kondisi-kondisi berikut terpenuhi: a. Ada suatu nilai yang dijadikan patokan (pivot), dan nilai tersebut harus sudah berada pada posisi yang diinginkan. (Jika pivot ini adalah elemen ke-j terkecil dari array A, maka posisinya harus berada pada A[j].) b. Semua elemen dari A[1] hingga A[j-1] harus lebih kecil nilainya dibandingkan A[j], sehingga membentuk suatu sub-array.

Quicksort: Metode Pengurutan Array Satu Dimensi yang Cepat dan Efisien (Muhammad Saiful Islam) 3 c. Semua elemen dari A[j+1] hingga A[N] harus lebih besar nilainya dibandingkan A[j], sehingga membentuk suatu sub-array. 2. Masing-masing sub-array diurutkan dengan algoritma yang sama dengan yang dilakukan di atas. Gambar 1 menunjukkan gambaran proses partitioning yang dilakukan oleh Quicksort. Gambar 1 Gambaran proses partitioning Quicksort (Sedgewick & Wayne, 2011) Quicksort lebih unggul dari algoritmaalgoritma pengurutan data yang ada karena (Sedgewick, 1978): Quicksort memiliki performa yang baik di berbagai kondisi. Quicksort lebih sederhana dibandingkan dengan algoritma pengurutan data yang lain. Analisa matematis dan analisa bukti empiris menunjukkan bahwa Quicksort bisa diharapkan bekerja dua kali lebih cepat dibandingkan metode lain yang serupa. Quicksort cukup sederhana untuk dipelajari para programmer yang baru mempelajari pengurutan data. Karena Quicksort begitu luas dipakai di berbagai bidang komputasi, maka para ilmuwan memandang penting untuk selalu melakukan improvisasi terhadap algoritma ini. Namun sejak Hoare memublikasikan Quicksort pada 1961, tidak banyak perbaikan yang dipublikasikan selanjutnya (Sedgewick, 1978). Robert Sedgewick dari Princeton University kemudian fokus mempelajari, menganalisa, dan memperbaiki Quicksort dalam tesis dan penelitian-penelitiannya (Khreisat, 2007). Quicksort melakukan pengurutan data secara in-place (dilakukan secara langsung pada sumber data tanpa membutuhkan tempat temporer lain). Dengan sifatnya ini, Quicksort tidak membutuhkan banyak tempat tambahan untuk melakukan pengurutan data. Untuk mengurutkan N data, waktu yang dibutuhkan sebanding dengan O(N log2 N). Satu-satunya kelemahan dari algoritma ini adalah jika array yang ingin diurutkan ternyata sudah dalam kondisi terurut, nyaris terurut, atau terurut namun dalam urutan yang terbalik, maka performa Quicksort akan menurun drastis. Untuk mengurutkan N data dalam kasus ini, waktu yang dibutuhkan sebanding dengan O(N 2 ). ISU PENTING DALAM QUICKSORT Ada beberapa isu penting yang muncul dalam penerapan algoritma Quicksort (Sedgewick & Wayne, 2011). Isu-isu ini dapat menyebabkan penurunan performa atau kesalahan implementasi jika tidak diperhatikan. Proses Partisi In-place Proses partisi pada Quicksort akan sangat mudah diimplementasikan jika kedua subarray diletakkan dalam array baru, bukan diatur secara in-place. Implementasinya pada sebuah array A adalah: 1. Ambil suatu pivot pada array A. 2. Siapkan dua buah array L dan R. 3. Masukkan semua elemen pada array A yang lebih kecil dari pivot ke dalam array L. 4. Masukkan semua elemen array A yang lebih kecil dari pivot ke array L, dan semua elemen array A yang lebih besar dari pivot ke array R. 5. Urutkan array L dan R dengan algoritma yang sama secara rekursif. 6. Gabungkan array L, pivot, dan array R. Meskipun mudah diimplementasikan, teknik ini tidak disarankan karena kemudahan yang didapatkan tidak sebanding dengan extra cost yang ditimbulkan saat komputasi. Teknik ini juga menimbulkan penurunan performa, terutama jika diimplementasikan pada bahasa pemrograman Java (Sedgewick & Wayne, 2011). Jangkauan Pengurutan Jika elemen yang dijadikan pivot adalah elemen terkecil atau elemen terbesar dari array, maka algoritma yang diterapkan harus dapat memeriksa agar dua pointer yang digunakan untuk traversal dalam penyusunan sub-array pada proses partisi tidak keluar dari batas awal dan batas akhir dari array yang sedang diurutkan.

4 Tugas MK Dasar-dasar Pemrograman 2014/2015 Pengacakan Array Sebelum Proses Partisi Perilaku algoritma Quicksort yang akan berjalan dengan performa yang buruk dapat dicegah dengan mengacak isi array yang akan diurutkan sebelum proses partisi. Pengacakan array juga dilakukan untuk menghilangkan faktor isi array pada performa Quicksort, sehingga performa algoritma Quicksort dan varian-variannya dapat diprediksi secara matematis dan tidak banyak faktor eksternal yang akan mempengaruhi hasil akhirnya. Mengakhiri Perulangan dan Proses Rekursif Setiap perulangan harus dijamin berhenti pada suatu kondisi, dan tidak boleh berjalan tanpa henti (infinite loop). Perulangan pada proses partisi pun harus berhenti pada suatu kondisi. Hal yang perlu diperhatikan dari perulangan proses partisi adalah pemeriksaan apakah kedua pointer yang berjalan di masing-masing sub-array sudah berpapasan satu sama lain. Kesalahan umum yang terjadi dalam proses implementasi adalah luputnya pertimbangan bahwa dalam array tersebut mungkin saja ada data ganda, khususnya data yang sama dengan pivot yang digunakan. Setiap proses yang memanggil dirinya sendiri (rekursif) juga harus dijamin berhenti pada suatu kondisi, dan tidak boleh terus-terusan memanggil dirinya sendiri tanpa henti. Menangani Perilaku O(N 2 ) Ada dua pemeriksaan yang berjalan pada saat proses partisi, yaitu: Left scan, yaitu pemeriksaan elemenelemen yang tidak seharusnya berada di sebelah kiri pivot, yaitu elemen-elemen yang lebih besar dari pivot. Right scan, yaitu pemeriksaan elemenelemen yang tidak seharusnya berada di sebelah kanan pivot, yaitu elemen-elemen yang lebih kecil dari pivot. Pada kasus tertentu, misalnya, ketika semua elemen pada array memiliki nilai yang sama, maka definisi left scan dan right scan ini dapat mengakibatkan performa Quicksort menurun hingga O(N 2 ). Hal ini dapat terjadi jika pivot diambil dari elemen pertama atau terakhir, sehingga akan ada satu sub-array yang kosong. Dengan kondisi satu sub-array selalu kosong, maka pola partisi yang dilakukan akan menyerupai pola loop yang memiliki kompleksitas O(N 2 ). Perilaku O(N 2 ) ini dapat diselesaikan dengan cara mengubah definisi left scan dan right scan yang dilakukan oleh Quicksort sehingga left scan berhenti jika ditemukan elemen yang lebih besar atau sama dengan pivot, dan right scan berhenti jika ditemukan elemen yang lebih kecil atau sama dengan pivot. Cara ini terbukti mampu menangani perilaku O(N 2 ) karena elemen yang dijadikan pivot akan selalu berakhir di tengah-tengah array, sehingga akan selalu terbentuk dua sub-array (Sedgewick, 1978). Selain cara di atas, perilaku O(N 2 ) dapat dihindari dengan cara mengacak array terlebih dahulu sebelum melakukan partisi dan pengurutan (Hoare, 1962). IMPROVISASI ALGORITMA Sejak dipublikasikan oleh Hoare pada tahun 1960, banyak orang yang mempelajari dan berusaha mengembangkan Quicksort. Tidak semua ide-ide perbaikan Quicksort berjalan dengan baik, karena algoritma Hoare cukup stabil, sehingga improvisasi yang kurang baik justru dapat mengganggu stabilitas algoritma itu sendiri (Sedgewick & Wayne, 2011). Namun beberapa ide-ide perbaikan Quicksort yang terpublikasi cukup berhasil dalam meningkatkan performa Quicksort sekaligus memuaskan para akademisi secara kognitif. Secara umum, algoritma Quicksort tidak membutuhkan improvisasi berlebih jika hanya dipakai untuk program tertentu di mana data requirement-nya sudah jelas. Namun, ketika Quicksort digunakan sebagai library yang akan dipanggil berulang kali dan belum jelas karakteristik datanya, maka perlu dilakukan improvisasi untuk menjamin performa dari aplikasi yang akan menggunakan library tersebut. Kombinasi dengan Insertion Sort Hasil studi empiris maupun analisis menunjukkan Quicksort lebih lambat dibandingkan insertion sort jika digunakan untuk mengurutkan data yang kuantitasnya kecil. Selain itu, karena sifat Quicksort yang rekursif, maka proses partisi dan pengurutan data pada masing-masing sub-array akan tetap dijalankan meskipun proses tersebut dipandang oleh para akademisi sebagai proses yang boros akibat kuantitas datanya yang kecil. Fakta ini yang menjadi pemicu munculnya ide untuk mengombinasikan insertion sort dengan Quicksort. Insertion sort dilakukan pada subarray jika jumlah elemen pada sub-array tersebut adalah M, di mana nilai M bergantung pada sistem yang digunakan. Meski demikian, hasil observasi menunjukkan bahwa nilai M yang optimal rata-rata bernilai antara 5 hingga

Quicksort: Metode Pengurutan Array Satu Dimensi yang Cepat dan Efisien (Muhammad Saiful Islam) 5 15 (Sedgewick & Wayne, 2011). Partisi dengan Median Tiga Nilai Hasil pengamatan menunjukkan bahwa Quicksort bekerja sangat baik jika setelah proses partisi, pivot berada pada posisi yang relatif di tengah array. Nilai yang relatif berada di tengah array memiliki korelasi dengan definisi dari nilai median. Metode yang dapat digunakan dalam menentukan pivot adalah dengan mengambil sampel dari array, kemudian dicari nilai mediannya. Hasil dari nilai median yang ditemukan kemudian digunakan untuk melakukan prediksi terhadap nilai median dari keseluruhan array. Hoare sebenarnya sudah mengajukan cara ini, namun Hoare tidak menekankan implementasi ini karena peningkatan performa yang dilakukan sangat sulit untuk dianalisa dan diprediksi (Hoare, 1962). Analisis Sedgewick menunjukkan bahwa peningkatan performa maksimal dapat ditempuh jika nilai median ditentukan dari tiga elemen saja (Sedgewick, 1978). Jumlah sampel yang lebih besar akan memberikan perkiraan yang lebih baik terhadap nilai median dari array, namun peningkatan performa yang diberikan tidak signifikan karena ada cost tambahan untuk menghitung nilai median. Menangani Data Ganda Pengurutan data sering dilakukan terhadap sekelompok data yang memiliki banyak data ganda. Contohnya, mengurutkan data karyawan berdasarkan tahun lahir atau jenis kelamin. Implementasi Quicksort sebenarnya masih bekerja dalam performa yang wajar, namun kasus semacam ini memberikan peluang improvisasi untuk peningkatan performa. Contohnya, sub-array yang semua elemennya bernilai sama tidak perlu lagi diurutkan, tetapi Quicksort akan tetap melakukan partisi terhadap sub-array ini sehingga melakukan operasi yang tidak perlu. Ide yang umum digunakan untuk melakukan improvisasi pada kasus ini adalah dengan mempartisi array menjadi tiga bagian, yaitu (Sedgewick & Wayne, 2011): 1. Sub-array dengan elemen yang nilainya lebih kecil dari pivot, 2. Sub-array dengan elemen yang nilainya sama dengan pivot, 3. Sub-array dengan elemen yang nilainya lebih besar dari pivot. Pengurutan data kemudian dapat dilakukan hanya pada sub-array pertama dan ketiga secara rekursif. Gambar 2 menunjukkan bagaimana visualisasi dari ide improvisasi di atas. Ide partisi tiga bagian ini kemudian menjadi erat korelasinya dengan latihan pemrograman klasik yang dibuat oleh E. W. Djikstra, yaitu Dutch National Flag Problem, karena pola partisi yang dilakukan akan menyerupai bagaimana tiga warna pada bendera Belanda tersusun (Sedgewick & Wayne, 2011). Gambar 2 Visualisasi partisi tiga bidang untuk menangani data ganda (Sedgewick & Wayne, 2011)

6 Tugas MK Dasar-dasar Pemrograman 2014/2015 Mengurangi Kedalaman Rekursi Karena Quicksort adalah algoritma rekursif, maka perlu diperhatikan bahwa operasi rekursif yang dilakukan oleh Quicksort akan membutuhkan resource untuk menampung kedalaman dari rekursi yang dilakukan. Untuk menghindari rekursi yang terlalu dalam, maka pemanggilan rekursif untuk mengurutkan dua sub-array dapat dilakukan dengan cara mengurutkan sub-array dengan jumlah elemen yang lebih kecil terlebih dahulu. Dengan cara ini kedalaman rekursif maksimal untuk mengurutkan N buah elemen adalah log2 N (Hoare, 1962). Untuk mengimplementasikan cara ini, harus dipertimbangkan juga bahwa tidak semua bahasa pemrograman dapat mengerti bahwa resource yang digunakan pada pemanggilan rekursif sub-array pertama harus dibebaskan terlebih dahulu sebelum pemanggilan rekursif sub-array kedua, agar nilai log2 N tercapai. APLIKASI Salah satu alasan utama kenapa pengurutan data begitu penting dan sering digunakan dalam dunia komputasi adalah karena mencari data dalam sekelompok data terurut lebih mudah daripada mencari data dalam sekelompok data yang tidak terurut. Sebagai contoh, buku kuning Yellow Pages yang beredar luas pada tahun 2000-an menampilkan daftar nomor telepon terurut berdasarkan nama, sehingga pengguna buku dapat mencari nama yang ingin dihubungi dengan cepat. Di era komputasi modern, sebagian kecil implementasi pengurutan data yang ditemukan dalam kehidupan sehari-hari adalah aplikasi pemutar musik mengurutkan daftar lagu berdasarkan album atau nama penyanyinya; mesin pencari menampilkan hasil pencarian terurut berdasarkan relevansi dengan kata kunci yang diberikan; aplikasi spreadsheet menampilkan data terurut berdasarkan kolom tertentu; dan masih banyak lagi implementasi pengurutan data yang ditemukan sehari-hari. Keperluan lain pun menjadi lebih mudah dilakukan jika sekelompok data yang digunakan sudah dalam kondisi terurut, misalnya mencari kata kunci tertentu dari suatu index di bagian belakang buku; menghapus data ganda dari suatu daftar website atau mailing list; atau komputasi statistik seperti mencari nilai median atau menghitung persentil. Pengurutan data juga digunakan dalam kasus-kasus penting yang kelihatannya tidak berkaitan dengan pengurutan data. Contohnya, kompresi data, proses render grafis, komputasi biologi, atau voting dalam pemilihan opsi tertentu. PENUTUP Paper ini menunjukkan seberapa cepat dan efisien Quicksort sehingga digunakan untuk menyelesaikan berbagai permasalahan pengurutan data. Quicksort juga termasuk algoritma yang menarik, di mana Hoare berhasil mencapai performa dan tingkat efisiensi yang mengagumkan dengan algoritma yang elegan dan cantik. Mengagumkan juga jika kita melihat bahwa dari penemuan Hoare ini muncul banyak akademisi yang mampu mengembangkan algoritma cantik ini dan menemukan isu-isu dalam pengembangan sistem yang perlu diwaspadai oleh para praktisi ataupun ilmuwan computer science. Perlu diperhatikan bahwa isu-isu dan improvisasi yang dibahas dalam paper ini sangat bergantung pada situasi dan kondisi. Isu-isu ekonomis yang terkait dengan komputasi modern masih sangat beragam dan kompleks, sehingga kita tidak dapat menentukan secara definitif metode pengurutan data yang dapat digunakan dalam berbagai kondisi. Metode asli Quicksort yang dibuat oleh Hoare bekerja dengan baik untuk aplikasi-aplikasi sederhana tanpa perlu menambahkan improvisasi di sana-sini. Meski demikian, pengurutan data adalah salah satu pekerjaan yang paling sering digunakan, sehingga mayoritas aplikasi komputer menggunakan program kecil (utility) tertentu untuk mengurutkan data. Dalam kasus ini, berbagai improvisasi serta ketelitian dalam mengukur kasus-kasus ekstrim sangat diperlukan dalam proses implementasi, sehingga performa yang dicapai meningkat dan tidak mengganggu performa aplikasi secara keseluruhan. DAFTAR PUSTAKA Cormen, T. H., Leiserson, C. E., Rivest, R. L. & Stein, C., 2009. Introduction to Algorithms. 3 rd ed. Cambridge: The MIT Press. Hoare, C. A. R., 1961. Algorithm 64: Quicksort. Communications of the ACM, 4(7), p. 321. Hoare, C. A. R., 1962. Quicksort. The Computer Journal, 5(1), pp. 10-15. Khreisat, L., 2007. Quicksort: A Historical Perspective and Empirical Study. IJCSNS International Journal of Computer Science and Network Security, 7(12), pp. 54-65.

Quicksort: Metode Pengurutan Array Satu Dimensi yang Cepat dan Efisien (Muhammad Saiful Islam) 7 Sedgewick, R., 1978. Implementing Quicksort programs. Communications of the ACM, 21(10), pp. 847-857. Sedgewick, R. & Wayne, K., 2011. Algorithms. 4 th ed. Boston: Pearson Education, Inc.