Analisis Perbandingan Algoritma QuickSort, 3 Way QuickSort, dan RadixSort
BAB 2
LANDASAN TEORI
2.1.
Algoritma
Secara informal, sebuah algoritma adalah prosedur komputasi yang didefinisikan
dengan baik yang mengambil beberapa nilai, atau seperangkat nilai sebagai input dan
menghasilkan nilai, atau seperangkat nilai sebagai output [2].
Algoritma yang akan dianalisis dan dibandingkan pada penelitian ini adalah
algoritma Sorting (pengurutan) yaitu algoritma QuickSort, 3 Way QuickSort, dan
RadixSort. Algoritma pengurutan adalah algoritma yang menyusun kembali rentetan
objek-objek untuk meletakkan objek suatu kumpulan data tersebut ke dalam urutan
yang logis
[9]
. Algoritma adalah prosedur komputasi yang didefinisikan dengan baik
yang mengambil beberapa nilai yaitu seperangkat nilai sebagai input dan output yang
menghasilkan nilai. Algoritma juga merupakan pola pikir terstruktur yang berisi
tahapan penyelesaian, yang nantinya akan diimplementasikan ke dalam suatu bahasa
pemrograman
[6]
. Berdasarkan pengertian algoritma tersebut, dapat disimpulkan
bahwa algoritma merupakan suatu istilah yang luas, yang tidak hanya berkaitan
dengan dunia komputer.
Menurut Donald E. Knuth, algoritma yang baik memiliki kriteria sebagai
berikut:
1. Input
Suatu algoritma harus memiliki 0 (nol) atau lebih masukan (input). Artinya,
suatu algoritma itu dimungkinkan tidak memiliki masukan secara langsung
dari pengguna tetapi dapat juga memiliki beberapa masukan. Algoritma
yang tidak memiliki masukan secara langsung dari pengguna, maka semua
data dapat diinisialisasikan atau dibangkitkan dalam algoritma.
Universitas Sumatera Utara
6
2. Output
Suatu algoritma harus memiliki satu atau lebih algoritma. Suatu algoritma
yang tidak memiliki keluaran (output) adalah suatu algoritma yang sia-sia,
yang tidak perlu dilakukan. Algoritma dibuat untuk tujuan menghasilkan
sesuatu yang diinginkan, yaitu berupa hasil keluaran.
3. Finiteness
Setiap pekerjaan yang dikerjakan pasti berhenti. Demikian juga algoritma
harus dapat dijamin akan berhenti setelah melakukan sejumlah langkah proses.
4. Definiteness
Algoritma tersebut tidak menimbulkan makna ganda (ambiguous). Setiap baris
aksi/pernyataan dalam suatu algoritma harus pasti, artinya tidak menimbulkan
penafsiran lain bagi setiap pembaca algoritma, sehingga memberikan output
yang sesuai dengan yang diharapkan oleh pengguna.
5. Effectiveness
Setiap langkah algoritma harus sederhana sehingga dikerjakan dalam waktu
yang wajar. [10]
2.2.
Kompleksitas Algoritma
Dalam aplikasinya, setiap algoritma memiliki dua buah ciri khas yang dapat
digunakan sebagai parameter pembanding, yaitu jumlah proses yang dilakukan dan
jumlah memori yang digunakan untuk melakukan proses. Jumlah proses ini dikenal
sebagai kompleksitas waktu yang disimbolkan dengan T(n), sedangkan jumlah
memori ini dikenal sebagai kompleksitas ruang yang disimbolkan dengan S(n). [12]
2.2.1. Kompleksitas waktu
Kompleksitas waktu T(n), diukur dari jumlah tahapan komputasi yang dibutuhkan
untuk menjalankan algoritma sebagai fungsi dari ukuran masukan n. Jumlah tahapan
komputasi dihitung dari berapa kali suatu operasi dilaksanakan di dalam sebuah
algoritma sebagai fungsi ukuran masukan (n).
Hal-hal yang mempengaruhi kompleksitas waktu:
1. Jumlah masukan data untuk suatu algoritma (n).
2. Waktu yang dibutuhkan untuk menjalankan algoritma tersebut.
Universitas Sumatera Utara
7
Ruang memori yang dibutuhkan untuk menjalankan algoritma yang berkaitan
dengan strutur data dari program.[1] Oleh karena itu, pada komputer dan compiler yang
berbeda, suatu algoritma yang sama akan memiliki waktu eksekusi yang berbeda.
2.2.2. Kompleksitas waktu asimptotik
Notasi “O” disebut notasi “O-Besar” (Big-O) yang merupakan notasi kompleksitas
waktu asimptotik. Kompleksitas waktu asimptotik merupakan perkiraan kebutuhan
algoritma sejalan dengan meningkatnya nilai n. Pada umumnya, algoritma
menghasilkan laju waktu yang semakin lama bila nilai n semakin besar. Berikut
pengelompokan algoritma berdasarkan notasi O-Besar dapat dilihat pada Tabel 2.1.
Tabel 2.1. Pengelompokan algoritma berdasarkan notasi O-Besar
No
Kelompok Algoritma
Nama
1
O(1)
Konstan
2
O(log n)
Logaritmik
3
O(n)
Linear
4
O(n log n)
Linearitmik
5
O(n2)
Kuadratik
6
O(n3)
Kubik
7
O(nm)
Polinomial
8
O(n!)
Faktorial
Keterangan Tabel:
1. Konstan O(1): Disebut konstan, karena program hanya dieksekusi dengan
suatu nilai yang konstan.
2. Logaritmik O(log n): Disebut algoritma logaritmik, karena peningkatan waktu
eksekusi sebanding dengan peningkatan logaritma dari jumlah data.
3. Linear O(n): Disebut linear, karena peningkatan waktu eksekusi sebanding
dengan peningkatan data, dan merupakan kondisi optimal dalam membuat
algoritma.
4. Linearitmik O(n log n): Disebut linearitmik, karena merupakan gabungan dari
linear dan logaritmik. Algortima ini merupakan algoritma log n yang
Universitas Sumatera Utara
8
dijalankan sebanyak n kali. Biasanya digunakan untuk memecahkan masalah
besar menjadi masalah yang kecil.
5. Kuadratik O(n2): Disebut kuadratik, karena peningkatan waktu eksekusi
program akan sebanding dengan peningatan kuadrat jumlah data.
6. Kubik O(n3): Disebut kubik, karena peningkatan waktu eksekusi program akan
sebanding dengan peningkatan pangkat tiga jumlah data.
7. Polinomial O(nm): Algoritma yang tidak efisien, karena memerlukan jumlah
langkah penyelesaian yang jauh lebih besar daripada jumlah data.
8. Faktorial O(n!): Merupakan algoritma yang paling tidak efisien, karena waktu
eksekusi program akan sebanding dengan peningkatan faktorial jumlah data.
Gambar 2.1. Grafik Perbandingan Pengelompokan Algoritma
Berdasarkan Notasi O-Besar
2.2.3. Kompleksitas ruang
Kompleksitas ruang (Sn) adalah jumlah memori yang dibutuhkan oleh komputer untuk
menjalankan sebuah algoritma sampai selesai. Kompleksitas ruang (Sn) diukur
berdasarkan struktur data yang digunakan di dalam algoritma sebagai fungsi dari
ukuran masukan n.
Universitas Sumatera Utara
9
2.3.
Running Time
Running time adalah waktu yang digunakan oleh sebuah algoritma untuk
menyelesaikan masalah pada sebuah komputer paralel dihitung mulai dari saat
algoritma mulai hingga saat algoritma berhenti. Jika prosesor-prosesornya tidak mulai
dan selesai pada saat yang bersamaan, maka running time dihitung mulai saat
komputasi pada prosesor pertama dimulai hingga pada saat komputasi pada prosesor
terakhir selesai.
2.4. Pengurutan
Pengurutan merupakan proses yang menyusun kembali rentetan objek-objek untuk
meletakkan objek dari suatu kumpulan data ke dalam urutan yang logis. Pada
dasarnya, pengurutan (sorting) membandingkan antar data atau elemen berdasarkan
kriteria dan kondisi tertentu.[4] Ada dua jenis pengurutan, yakni secara ascending
(naik) dan descending (turun).
Ada dua kategori pengurutan, yaitu:
1. Pengurutan internal
Pengurutan internal adalah pengurutan yang dilaksanankan hanya dengan
menggunakan memori komputer, pada umumnya digunakan bila jumlah elemen
tidak terlalu banyak.
2. Pengurutan eksternal
Pengurutan eksternal adalah pengurutan yang dilaksanakan dengan bantuan
memori virtual atau harddisk karena jumlah elemen yang akan diurutkan terlalu
banyak.
2.5.
Klasifikasi Algoritma Pengurutan
Algoritma pengurutan diklasifikasikan berdasarkan prosesnya menjadi beberapa jenis,
yakni,
1. Exchange Sort
Algoritma yang dikategorikan dalam Exchange Sort jika cara kerja algoritma
tersebut melakukan pembandingan antar data dan melakukan pertukaran
apabila urutan yang didapat belum sesuai. Contohnya adalah bubble sort,
cocktail sort, comb sort, gnome sort, quick sort.
Universitas Sumatera Utara
10
2. Selection Sort
Algoritma yang dikategorikan dalam Selection Sort jika cara kerja algoritma
tersebut mencari elemen yang tepat untuk diletakkan pada posisi yang telah
diketahui, dan meletakkannya di posisi tersebut setelah data tersebut
ditemukan. Contohnya adalah selection sort, heap sort, smooth sort, strand
sort.
3. Insertion Sort
Algoritma yang dikategorikan dalam Insertion Sort jika cara kerja algoritma
tersebut mencari tempat yang tepat untuk suatu elemen data yang telah
diketahui ke dalam subkumpulan data yang telah terurut, kemudian melakukan
penyisipan (insertion) data di tempat yang tepat tersebut. Contohnya adalah
insertion sort, shell sort, tree sort, library sort, patience sort.
4. Merge Sort
Algoritma yang dikategorikan dalam Merge Sort jika cara kerja algoritma
tersebut membagi data menjadi subkumpulan-subkumpulan yang kemudian
subkumpulan tersebut diurutkan secara terpisah, dan kemudian digabungkan
kembali dengan metode merging. algoritma ini melakukan metode pengurutan
merge sort juga untuk mengurutkan subkumpulandata tersebut, atau dengan
kata lain, pengurutan dilakukan secara rekursif. Contohnya adalah merge sort.
5. Non Comparison Sort
Algoritma yang dikategorikan dalam Non Comparison Sort jika proses
pengurutan data yang dilakukan algoritma tersebut tidak terdapat pembanding
antar data, data diurutkan sesuai dengan pigeon hole principle. Contohnya
adalah radix sort, bucket sort, counting sort, pigeonhole sort, tally sort.
2.6.
Algoritma QuickSort
Algoritma QuickSort merupakan teknik pengurutan yang dikemukakan pertama kali
oleh C.A.R Hoare pada tahun 1962. Metode penyelesaiannya menggunakan
pendekatan rekursif[5]. QuickSort disebut juga sebagai Partition Exchange Sort.
Disebut QuickSort karena terbukti mempunyai kemampuan average behaviour yang
terbaik diantara algoritma pengurutan yang lain. Disebut Partition Exchange Sort
Universitas Sumatera Utara
11
karena proses pengurutan menggunakan partisi dan pengurutan dilakukan pada setiap
partisi [7].
2.6.1. Langkah-langkah melakukan pengurutan algoritma QuickSort
Tahapan dalam melakukan partisi pada Algoritma QuickSort sebagai berikut:
1. Pilih x Є {A1, A2, ... , An} sebagai elemen pivot (x)
2. Lakukan scanning tabel dari kiri ke kanan sampai ditemukan Ap≥x
3. Lakukan scanning tabel dari kanan ke kiri sampai ditemukan Aq≤x
4. Swap Ap↔
Aq
5. Ulangi langkah ke-2, sampai kedua scanning bertemu di tengah tabel.
Untuk menetukan pivot, ada baiknya dari median tabel. Sebagai contoh, ambil
bilangan acak:
523
235
088
880
028
093
002
153
1. Menentukan pivot
A1
A2
A3
A4
A5
A6
A7
A8
523
235
088
880
028
093
002
153
x
2. Melakukan scanning tabel dari kiri ke kanan sampai ditemukan Ap≥x dan
scanning tabel dari kanan ke kiri sampai ditemukan Aq≤x
A1
A2
A3
A4
A5
A6
A7
A8
523
235
088
880
028
093
002
153
p
x
3. Swap Ap↔
q
Aq
A1
A2
A3
A4
A5
A6
A7
A8
002
235
088
880
028
093
523
153
p
x
q
Universitas Sumatera Utara
12
4. Mengulangi langkah ke-2 dari posisi p+1 dan dari posisi q-1, sampai kedua
scanning bertemu ditengah tabel.
A1
A2
A3
A4
A5
A6
A7
A8
002
235
088
880
028
093
523
153
p
x
q
5. Swap Ap↔
Aq
A1
A2
A3
A4
A5
A6
A7
A8
002
028
088
880
235
093
523
153
p
x
q
6. Mengulangi langkah ke-2, karena pivot telah berubah
A1
A2
A3
A4
A5
A6
A7
A8
002
028
088
880
235
093
523
153
p
x
7. Swap Ap↔
q
Aq
A1
A2
A3
A4
A5
A6
A7
A8
002
028
088
153
235
093
523
880
p
x
q
8. Mengulangi langkah ke-2 dari posisi p+1 dan dari posisi q-1, sampai kedua
scanning bertemu ditengah table
A1
A2
A3
A4
A5
A6
A7
A8
002
028
088
153
235
093
523
880
x
q
p
Universitas Sumatera Utara
13
9. Swap Ap↔
Aq, berhenti karena p≤q di tengah tabel
A1
A2
A3
A4
A5
A6
A7
A8
002
028
088
153
093
235
523
880
x
q
p
10. Membagi partisi menjadi 2 tabel:
Hasil partisi pertama:
A1
A2
A3
A4
A5
002
028
088
153
093
A1
A2
A3
A4
A5
002
028
088
153
093
11. Menentukan pivot
x
12. Melakukan scanning tabel dari kiri ke kanan sampai ditemukan Ap≥x dan
scanning tabel dari kanan ke kiri sampai ditemukan Aq≤x
A1
A2
A3
A4
A5
002
028
088
153
093
x
q
p
13. Swap Ap↔
Aq, berhenti karena p≤q di tengah tabel
A1
A2
A3
A4
A5
002
028
088
093
153
x
q
p
Hasil partisi kedua:
A6
A7
A8
235
523
880
Universitas Sumatera Utara
14
14. Menentukan pivot
A6
A7
A8
235
523
880
x
15. Melakukan scanning tabel dari kiri ke kanan sampai ditemukan Ap≥x dan
scanning tabel dari kanan ke kiri sampai ditemukan Aq≤x. Dan ternyata,
tidak dapat melakukan scanning karena syarat tidak memenuhi. Oleh
karena itu, hasil scanning partisi kedua selesai dan merupakan hasil akhir
pemartisian.
A6
A7
A8
235
523
880
x
16. Hasil akhir merupakan gabungan antara hasil akhir proses partisi pertama
dan kedua
A1
A2
A3
A4
A5
A6
A7
A8
002
028
088
093
153
235
523
880
2.6.2. Pseudocode algoritma QuickSort
Menurut Fachrie Lantera, 2008 pseudocode pada algoritma QuickSort adalah sebagai
berikut:
Procedure QuickSort (input/output a : array [1..n] of integer, input i,j : integer )
Deklarasi :
{mengurutkan tabel a[i..j] dengan algoritma QuickSort.
Masukkan: Tabel a[i..j] yang sudah terdefinisi elemen-elemennya.
Keluaran: Tabel a[i..j] yang terurut menaik.}
Deklarasi :
k : integer;
Algoritma :
Universitas Sumatera Utara
15
if (i 1}
QuickSort(a,i,k)
QuickSort(a,k+1, j)
End if
Procedure Partisi (input/output: a : array[1..n] of integer, input i, j : integer,
output q : integer)
{Membagi tabel a[i..j] menjadi dua tabel a[i..q] dan a[q+1..j]
scanning a[i..q] dan a[q+1..j] Sedemikian sehingga elemen tabel a[i..q] lebih kecil
dari elemen tabel a[q+1..j] }
Deklarasi :
Pivot, temp : integer
Algoritma :
Pivot
LANDASAN TEORI
2.1.
Algoritma
Secara informal, sebuah algoritma adalah prosedur komputasi yang didefinisikan
dengan baik yang mengambil beberapa nilai, atau seperangkat nilai sebagai input dan
menghasilkan nilai, atau seperangkat nilai sebagai output [2].
Algoritma yang akan dianalisis dan dibandingkan pada penelitian ini adalah
algoritma Sorting (pengurutan) yaitu algoritma QuickSort, 3 Way QuickSort, dan
RadixSort. Algoritma pengurutan adalah algoritma yang menyusun kembali rentetan
objek-objek untuk meletakkan objek suatu kumpulan data tersebut ke dalam urutan
yang logis
[9]
. Algoritma adalah prosedur komputasi yang didefinisikan dengan baik
yang mengambil beberapa nilai yaitu seperangkat nilai sebagai input dan output yang
menghasilkan nilai. Algoritma juga merupakan pola pikir terstruktur yang berisi
tahapan penyelesaian, yang nantinya akan diimplementasikan ke dalam suatu bahasa
pemrograman
[6]
. Berdasarkan pengertian algoritma tersebut, dapat disimpulkan
bahwa algoritma merupakan suatu istilah yang luas, yang tidak hanya berkaitan
dengan dunia komputer.
Menurut Donald E. Knuth, algoritma yang baik memiliki kriteria sebagai
berikut:
1. Input
Suatu algoritma harus memiliki 0 (nol) atau lebih masukan (input). Artinya,
suatu algoritma itu dimungkinkan tidak memiliki masukan secara langsung
dari pengguna tetapi dapat juga memiliki beberapa masukan. Algoritma
yang tidak memiliki masukan secara langsung dari pengguna, maka semua
data dapat diinisialisasikan atau dibangkitkan dalam algoritma.
Universitas Sumatera Utara
6
2. Output
Suatu algoritma harus memiliki satu atau lebih algoritma. Suatu algoritma
yang tidak memiliki keluaran (output) adalah suatu algoritma yang sia-sia,
yang tidak perlu dilakukan. Algoritma dibuat untuk tujuan menghasilkan
sesuatu yang diinginkan, yaitu berupa hasil keluaran.
3. Finiteness
Setiap pekerjaan yang dikerjakan pasti berhenti. Demikian juga algoritma
harus dapat dijamin akan berhenti setelah melakukan sejumlah langkah proses.
4. Definiteness
Algoritma tersebut tidak menimbulkan makna ganda (ambiguous). Setiap baris
aksi/pernyataan dalam suatu algoritma harus pasti, artinya tidak menimbulkan
penafsiran lain bagi setiap pembaca algoritma, sehingga memberikan output
yang sesuai dengan yang diharapkan oleh pengguna.
5. Effectiveness
Setiap langkah algoritma harus sederhana sehingga dikerjakan dalam waktu
yang wajar. [10]
2.2.
Kompleksitas Algoritma
Dalam aplikasinya, setiap algoritma memiliki dua buah ciri khas yang dapat
digunakan sebagai parameter pembanding, yaitu jumlah proses yang dilakukan dan
jumlah memori yang digunakan untuk melakukan proses. Jumlah proses ini dikenal
sebagai kompleksitas waktu yang disimbolkan dengan T(n), sedangkan jumlah
memori ini dikenal sebagai kompleksitas ruang yang disimbolkan dengan S(n). [12]
2.2.1. Kompleksitas waktu
Kompleksitas waktu T(n), diukur dari jumlah tahapan komputasi yang dibutuhkan
untuk menjalankan algoritma sebagai fungsi dari ukuran masukan n. Jumlah tahapan
komputasi dihitung dari berapa kali suatu operasi dilaksanakan di dalam sebuah
algoritma sebagai fungsi ukuran masukan (n).
Hal-hal yang mempengaruhi kompleksitas waktu:
1. Jumlah masukan data untuk suatu algoritma (n).
2. Waktu yang dibutuhkan untuk menjalankan algoritma tersebut.
Universitas Sumatera Utara
7
Ruang memori yang dibutuhkan untuk menjalankan algoritma yang berkaitan
dengan strutur data dari program.[1] Oleh karena itu, pada komputer dan compiler yang
berbeda, suatu algoritma yang sama akan memiliki waktu eksekusi yang berbeda.
2.2.2. Kompleksitas waktu asimptotik
Notasi “O” disebut notasi “O-Besar” (Big-O) yang merupakan notasi kompleksitas
waktu asimptotik. Kompleksitas waktu asimptotik merupakan perkiraan kebutuhan
algoritma sejalan dengan meningkatnya nilai n. Pada umumnya, algoritma
menghasilkan laju waktu yang semakin lama bila nilai n semakin besar. Berikut
pengelompokan algoritma berdasarkan notasi O-Besar dapat dilihat pada Tabel 2.1.
Tabel 2.1. Pengelompokan algoritma berdasarkan notasi O-Besar
No
Kelompok Algoritma
Nama
1
O(1)
Konstan
2
O(log n)
Logaritmik
3
O(n)
Linear
4
O(n log n)
Linearitmik
5
O(n2)
Kuadratik
6
O(n3)
Kubik
7
O(nm)
Polinomial
8
O(n!)
Faktorial
Keterangan Tabel:
1. Konstan O(1): Disebut konstan, karena program hanya dieksekusi dengan
suatu nilai yang konstan.
2. Logaritmik O(log n): Disebut algoritma logaritmik, karena peningkatan waktu
eksekusi sebanding dengan peningkatan logaritma dari jumlah data.
3. Linear O(n): Disebut linear, karena peningkatan waktu eksekusi sebanding
dengan peningkatan data, dan merupakan kondisi optimal dalam membuat
algoritma.
4. Linearitmik O(n log n): Disebut linearitmik, karena merupakan gabungan dari
linear dan logaritmik. Algortima ini merupakan algoritma log n yang
Universitas Sumatera Utara
8
dijalankan sebanyak n kali. Biasanya digunakan untuk memecahkan masalah
besar menjadi masalah yang kecil.
5. Kuadratik O(n2): Disebut kuadratik, karena peningkatan waktu eksekusi
program akan sebanding dengan peningatan kuadrat jumlah data.
6. Kubik O(n3): Disebut kubik, karena peningkatan waktu eksekusi program akan
sebanding dengan peningkatan pangkat tiga jumlah data.
7. Polinomial O(nm): Algoritma yang tidak efisien, karena memerlukan jumlah
langkah penyelesaian yang jauh lebih besar daripada jumlah data.
8. Faktorial O(n!): Merupakan algoritma yang paling tidak efisien, karena waktu
eksekusi program akan sebanding dengan peningkatan faktorial jumlah data.
Gambar 2.1. Grafik Perbandingan Pengelompokan Algoritma
Berdasarkan Notasi O-Besar
2.2.3. Kompleksitas ruang
Kompleksitas ruang (Sn) adalah jumlah memori yang dibutuhkan oleh komputer untuk
menjalankan sebuah algoritma sampai selesai. Kompleksitas ruang (Sn) diukur
berdasarkan struktur data yang digunakan di dalam algoritma sebagai fungsi dari
ukuran masukan n.
Universitas Sumatera Utara
9
2.3.
Running Time
Running time adalah waktu yang digunakan oleh sebuah algoritma untuk
menyelesaikan masalah pada sebuah komputer paralel dihitung mulai dari saat
algoritma mulai hingga saat algoritma berhenti. Jika prosesor-prosesornya tidak mulai
dan selesai pada saat yang bersamaan, maka running time dihitung mulai saat
komputasi pada prosesor pertama dimulai hingga pada saat komputasi pada prosesor
terakhir selesai.
2.4. Pengurutan
Pengurutan merupakan proses yang menyusun kembali rentetan objek-objek untuk
meletakkan objek dari suatu kumpulan data ke dalam urutan yang logis. Pada
dasarnya, pengurutan (sorting) membandingkan antar data atau elemen berdasarkan
kriteria dan kondisi tertentu.[4] Ada dua jenis pengurutan, yakni secara ascending
(naik) dan descending (turun).
Ada dua kategori pengurutan, yaitu:
1. Pengurutan internal
Pengurutan internal adalah pengurutan yang dilaksanankan hanya dengan
menggunakan memori komputer, pada umumnya digunakan bila jumlah elemen
tidak terlalu banyak.
2. Pengurutan eksternal
Pengurutan eksternal adalah pengurutan yang dilaksanakan dengan bantuan
memori virtual atau harddisk karena jumlah elemen yang akan diurutkan terlalu
banyak.
2.5.
Klasifikasi Algoritma Pengurutan
Algoritma pengurutan diklasifikasikan berdasarkan prosesnya menjadi beberapa jenis,
yakni,
1. Exchange Sort
Algoritma yang dikategorikan dalam Exchange Sort jika cara kerja algoritma
tersebut melakukan pembandingan antar data dan melakukan pertukaran
apabila urutan yang didapat belum sesuai. Contohnya adalah bubble sort,
cocktail sort, comb sort, gnome sort, quick sort.
Universitas Sumatera Utara
10
2. Selection Sort
Algoritma yang dikategorikan dalam Selection Sort jika cara kerja algoritma
tersebut mencari elemen yang tepat untuk diletakkan pada posisi yang telah
diketahui, dan meletakkannya di posisi tersebut setelah data tersebut
ditemukan. Contohnya adalah selection sort, heap sort, smooth sort, strand
sort.
3. Insertion Sort
Algoritma yang dikategorikan dalam Insertion Sort jika cara kerja algoritma
tersebut mencari tempat yang tepat untuk suatu elemen data yang telah
diketahui ke dalam subkumpulan data yang telah terurut, kemudian melakukan
penyisipan (insertion) data di tempat yang tepat tersebut. Contohnya adalah
insertion sort, shell sort, tree sort, library sort, patience sort.
4. Merge Sort
Algoritma yang dikategorikan dalam Merge Sort jika cara kerja algoritma
tersebut membagi data menjadi subkumpulan-subkumpulan yang kemudian
subkumpulan tersebut diurutkan secara terpisah, dan kemudian digabungkan
kembali dengan metode merging. algoritma ini melakukan metode pengurutan
merge sort juga untuk mengurutkan subkumpulandata tersebut, atau dengan
kata lain, pengurutan dilakukan secara rekursif. Contohnya adalah merge sort.
5. Non Comparison Sort
Algoritma yang dikategorikan dalam Non Comparison Sort jika proses
pengurutan data yang dilakukan algoritma tersebut tidak terdapat pembanding
antar data, data diurutkan sesuai dengan pigeon hole principle. Contohnya
adalah radix sort, bucket sort, counting sort, pigeonhole sort, tally sort.
2.6.
Algoritma QuickSort
Algoritma QuickSort merupakan teknik pengurutan yang dikemukakan pertama kali
oleh C.A.R Hoare pada tahun 1962. Metode penyelesaiannya menggunakan
pendekatan rekursif[5]. QuickSort disebut juga sebagai Partition Exchange Sort.
Disebut QuickSort karena terbukti mempunyai kemampuan average behaviour yang
terbaik diantara algoritma pengurutan yang lain. Disebut Partition Exchange Sort
Universitas Sumatera Utara
11
karena proses pengurutan menggunakan partisi dan pengurutan dilakukan pada setiap
partisi [7].
2.6.1. Langkah-langkah melakukan pengurutan algoritma QuickSort
Tahapan dalam melakukan partisi pada Algoritma QuickSort sebagai berikut:
1. Pilih x Є {A1, A2, ... , An} sebagai elemen pivot (x)
2. Lakukan scanning tabel dari kiri ke kanan sampai ditemukan Ap≥x
3. Lakukan scanning tabel dari kanan ke kiri sampai ditemukan Aq≤x
4. Swap Ap↔
Aq
5. Ulangi langkah ke-2, sampai kedua scanning bertemu di tengah tabel.
Untuk menetukan pivot, ada baiknya dari median tabel. Sebagai contoh, ambil
bilangan acak:
523
235
088
880
028
093
002
153
1. Menentukan pivot
A1
A2
A3
A4
A5
A6
A7
A8
523
235
088
880
028
093
002
153
x
2. Melakukan scanning tabel dari kiri ke kanan sampai ditemukan Ap≥x dan
scanning tabel dari kanan ke kiri sampai ditemukan Aq≤x
A1
A2
A3
A4
A5
A6
A7
A8
523
235
088
880
028
093
002
153
p
x
3. Swap Ap↔
q
Aq
A1
A2
A3
A4
A5
A6
A7
A8
002
235
088
880
028
093
523
153
p
x
q
Universitas Sumatera Utara
12
4. Mengulangi langkah ke-2 dari posisi p+1 dan dari posisi q-1, sampai kedua
scanning bertemu ditengah tabel.
A1
A2
A3
A4
A5
A6
A7
A8
002
235
088
880
028
093
523
153
p
x
q
5. Swap Ap↔
Aq
A1
A2
A3
A4
A5
A6
A7
A8
002
028
088
880
235
093
523
153
p
x
q
6. Mengulangi langkah ke-2, karena pivot telah berubah
A1
A2
A3
A4
A5
A6
A7
A8
002
028
088
880
235
093
523
153
p
x
7. Swap Ap↔
q
Aq
A1
A2
A3
A4
A5
A6
A7
A8
002
028
088
153
235
093
523
880
p
x
q
8. Mengulangi langkah ke-2 dari posisi p+1 dan dari posisi q-1, sampai kedua
scanning bertemu ditengah table
A1
A2
A3
A4
A5
A6
A7
A8
002
028
088
153
235
093
523
880
x
q
p
Universitas Sumatera Utara
13
9. Swap Ap↔
Aq, berhenti karena p≤q di tengah tabel
A1
A2
A3
A4
A5
A6
A7
A8
002
028
088
153
093
235
523
880
x
q
p
10. Membagi partisi menjadi 2 tabel:
Hasil partisi pertama:
A1
A2
A3
A4
A5
002
028
088
153
093
A1
A2
A3
A4
A5
002
028
088
153
093
11. Menentukan pivot
x
12. Melakukan scanning tabel dari kiri ke kanan sampai ditemukan Ap≥x dan
scanning tabel dari kanan ke kiri sampai ditemukan Aq≤x
A1
A2
A3
A4
A5
002
028
088
153
093
x
q
p
13. Swap Ap↔
Aq, berhenti karena p≤q di tengah tabel
A1
A2
A3
A4
A5
002
028
088
093
153
x
q
p
Hasil partisi kedua:
A6
A7
A8
235
523
880
Universitas Sumatera Utara
14
14. Menentukan pivot
A6
A7
A8
235
523
880
x
15. Melakukan scanning tabel dari kiri ke kanan sampai ditemukan Ap≥x dan
scanning tabel dari kanan ke kiri sampai ditemukan Aq≤x. Dan ternyata,
tidak dapat melakukan scanning karena syarat tidak memenuhi. Oleh
karena itu, hasil scanning partisi kedua selesai dan merupakan hasil akhir
pemartisian.
A6
A7
A8
235
523
880
x
16. Hasil akhir merupakan gabungan antara hasil akhir proses partisi pertama
dan kedua
A1
A2
A3
A4
A5
A6
A7
A8
002
028
088
093
153
235
523
880
2.6.2. Pseudocode algoritma QuickSort
Menurut Fachrie Lantera, 2008 pseudocode pada algoritma QuickSort adalah sebagai
berikut:
Procedure QuickSort (input/output a : array [1..n] of integer, input i,j : integer )
Deklarasi :
{mengurutkan tabel a[i..j] dengan algoritma QuickSort.
Masukkan: Tabel a[i..j] yang sudah terdefinisi elemen-elemennya.
Keluaran: Tabel a[i..j] yang terurut menaik.}
Deklarasi :
k : integer;
Algoritma :
Universitas Sumatera Utara
15
if (i 1}
QuickSort(a,i,k)
QuickSort(a,k+1, j)
End if
Procedure Partisi (input/output: a : array[1..n] of integer, input i, j : integer,
output q : integer)
{Membagi tabel a[i..j] menjadi dua tabel a[i..q] dan a[q+1..j]
scanning a[i..q] dan a[q+1..j] Sedemikian sehingga elemen tabel a[i..q] lebih kecil
dari elemen tabel a[q+1..j] }
Deklarasi :
Pivot, temp : integer
Algoritma :
Pivot