• Tidak ada hasil yang ditemukan

Counting Sort.docx

N/A
N/A
Protected

Academic year: 2021

Membagikan "Counting Sort.docx"

Copied!
15
0
0

Teks penuh

(1)

1. Counting Sort

Definisi atau pengertian counting sort secara etimologis (tata bahasa) berasal dari dua kata dalam bahasa Inggris, yaitu counting yang berarti menghitung atau mencacah dan sort yang berarti menyortir atau bisa diartikan menyusun. Sedangkan secara terminologis dalam dunia pemrograman,

counting sort adalah sebuah teknik algoritma dalam mengurutkan data dari

yang terkecil ke terbesar (ascending) atau dari yang terbesar ke terkecil (descending) dimana dalam proses pengurutan tersebut tidak ada tahapan pembandingan data. Oleh karena itu, counting sort dimasukkan ke dalam kategori non-Comparison Sort atau dalam bahasa Indonesia-nya pengurutan tanpa pembandingan.

Dalam prosesnya, teknik algoritma counting sort melibatkan pencacahan atau perhitungan bilangan data dan indeks array. Perhitungan tersebut mencakup penjumlahan dan pengurangan. Oleh karena itu, teknik algortima sorting ini dinamakan dengan counting sort. Algoritma ini diciptakan oleh Harold H. Seward pada tahun 1954.

Counting Sort adalah algoritma pengurutan efektif dan efisien yang

melakukan pengurutan dengan ide dasar meletakkan elemen pada posisi yang benar, di mana penghitungan posisi yang benar dilakukan dengan cara menghitung (counting) elemen-elemen dengan nilai lebih kecil atau sama dengan elemen tersebut.

1.1 Ide Dasar Counting Sort

Untuk dapat melakukan pengurutan dengan counting sort rentang nilai untuk kumpulan data yang akan diurutkan harus diketahui, katakanlah

k. Ide dasar dari counting sort adalah menentukan, untuk setiap elemen x,

jumlah elemen yang lebih kecil daripada x, yang kemudian informasi ini digunakan untuk menentukan posisi x. Contoh sederhanannya jika ada 7 elemen yang lebih kecil dari x, maka x akan mendapatkan posisi di posisi 8.

(2)

1.2 Implementasi Counting Sort

Misal array data yang akan diurutkan adalah A. Counting Sort membutuhkan sebuah array C berukuran k, yang setiap elemen C[i] merepresentasikan jumlah elemen dalam A yang nilainya adalah i. Di array inilah penghitungan (counting) yang dilakukan dalam pengurutan ini disimpan.

Contoh 1 Pengurutan Secara Ascending:

Terdapat array A, dengan n adalah 5, dimana rentang nilai setiap A[i] adalah 1...4

A 2 1 4 3 2

C 0 0 0 0

1 2 3 4

Pengurutan array-nya dilakukan secara linier, dengan menelusuri array A. Proses pengurutanya yaitu sebagai berikut :

Langkah 1 :Pembacaan pertama mendapat elemen A[1] dengan isi 2, maka C[2] ditambah 1

A 2 1 4 3 2

C 0 1 0 0

1 2 3 4

Langkah 2 :Pembacaan kedua mendapat elemen A[2] dengan isi 1, maka C[1] ditambah1

A 2 1 4 3 2

C 1 1 0 0

(3)

Langkah 3 :Pembacaan ketiga mendapat elemen A[3] dengan isi 4, maka C[4] ditambah 1

A 2 1 4 3 2

C 1 1 0 1

1 2 3 4

Langkah 4 :Pembacaan keempat mendapat elemen A[4] dengan isi 3, maka C[3] ditambah1

A 2 1 4 3 2

C 1 1 1 1

1 2 3 4

Langkah 5 :Pembacaan kelima mendapat elemen A[5] denganisi 2, maka C[2] ditambah 1

A 2 1 4 3 2

C 1 2 1 1

1 2 3 4

Semua elemen A telah diakses. Sehingga didapatkan array C sebagai berikut.

C 1 2 1 1

1 2 3 4

Kemudian array C diproses sehingga setiap elemen C, C[i] tidak lagi merepresentasikan jumlah elemen dengan nilai sama dengan i, namun setiap

C[i] menjadi merepresentasikan jumlah elemen yang lebih kecil atau sama

(4)

C 1 3 4 5

1 2 3 4

Setelah C didapat, dilakukan proses penempatan sesuai dengan posisi yang didapat. Proses ini dilakukan dengan menelusuri kembali A dari belakang. Penelusuran dilakukan dari belakang karena kita mengharapkan hasil pengurutan yang stable, yang akan sangat penting dalam pengurutan data majemuk.

Dalam proses ini kita mengakses elemen A[i], kemudian memposisikannya di posisi sebagai mana tercatat dalam C[A[i]], kemudian kita mengurangkan C[A[i]] dengan 1, yang dengan jelas untuk memberikan posisi untuk elemen berikutnya dengan yang isinya sama dengan A[i]. Proses ini memerlukan sebuah array bantu B yang ukurannya sama dengan array A, yaitu n. Yang pada awalnya semua B[i] diinisialisasi denganNIL.

A 2 1 4 3 2

B - - - -

-C 1 3 4 5

1 2 3 4

Langkah 1 : Elemen A[5] adalah 2, dan C[2] adalah 3, maka B[3] diisi dengan 2, dan C[2] dikurangi 1

A 2 1 4 3 2

B - - 2 -

-C 1 3 4 5

(5)

C[2] setelah dikurangi 1

C 1 2 4 5

1 2 3 4

Langkah 2 : Elemen A[4] adalah 3, dan C[3] adalah 4, maka B[4] diisi dengan 3, dan C[3] dikurangi 1

A 2 1 4 3 2 B - - 2 3 -C 1 2 4 5 1 2 3 4 C[3] setelah dikurangi 1 C 1 2 3 5 1 2 3 4

Langkah 3 : Elemen A[3] adalah 4, dan C[4] adalah 5, maka B[5] diisi dengan 4, dan C[4] dikurangi 1

A 2 1 4 3 2

B - - 2 3 4

C 1 2 3 5

1 2 3 4

(6)

C 1 2 3 4

1 2 3 4

Langkah 4 : Elemen A[2] adalah 1, dan C[1] adalah 1, maka B[1] diisi dengan 1, dan C[1] dikurangi 1

A 2 1 4 3 2 B 1 - 2 3 4 C 1 2 3 4 1 2 3 4 C[1] setelah dikurangi 1 C 0 2 3 4 1 2 3 4

Langkah 5 : Elemen A[1] adalah 2, dan C[2] adalah 2, maka B[2] diisi dengan 2, dan C[2] dikurangi 1

A 2 1 4 3 2 B 1 2 2 3 4 C 0 2 3 4 1 2 3 4 C[1] setelah dikurangi 1 C 0 1 3 4 1 2 3 4

(7)

Setelah semua proses dilakukan maka akan diperoleh hasil akhir yang merupakan sebuah array dengan elemen-elemen yang sudah terurut secara

ascending. Array tersebut yaitu.

B 1 2 2 3 4

Contoh 2 Pengurutan Secara Descending:

Terdapat array A, dengan n adalah 5, dimana rentang nilai setiap A[i] adalah 1...4

A 2 1 4 3 2

C 0 0 0 0

1 2 3 4

Proses penempatan pada pengurutan Descending sama dengan proses penempatan pada pengurutan Ascending. Sehingga didapat array C yang sama dengan array C pada pengurutan Ascending, yaitu sebagai berikut.

C 1 3 4 5

1 2 3 4

Setelah C didapat, dilakukan proses penempatan sesuai dengan posisi yang didapat. Prosesnya sama dengan proses pengurutan pada ascending. Namun berbeda dengan ascending proses descending pada saat menempatkan elemen pada array B indeks perhitungannya menggunakan rumus (n-C[A[i]])+1

Langkah 1 : Elemen A[5] adalah 2, dan C[2] adalah 3, maka dengan menggunakan rumus (n-C[A[i]])+1, di dapat indeks B adalah 3, sehingga

(8)

A 2 1 4 3 2 B - - 2 - -C 1 3 4 5 1 2 3 4 C[2] setelah dikurangi 1 C 1 2 4 5 1 2 3 4

Langkah 2 : Elemen A[4] adalah 3, dan C[3] adalah 4, maka dengan menggunakan rumus di atas, di dapat indeks B adalah 2, sehingga B[2] diisi dengan nilai3, dan C[3] dikurangi 1

A 2 1 4 3 2 B - 3 2 - -C 1 3 4 5 1 2 3 4 C[3] setelah dikurangi 1 C 1 2 3 5 1 2 3 4

(9)

Langkah 3 : Elemen A[3] adalah 4, dan C[4] adalah 5, maka dengan menggunakan rumus di atas, di dapat indeks B adalah 1, sehingga B[1] diisidengan nilai5, dan C[4] dikurangi 1

A 2 1 4 3 2 B 4 3 2 - -C 1 2 3 5 1 2 3 4 [4] setelah dikurangi 1 C 1 2 3 4 1 2 3 4

Langkah 4 : Elemen A[2] adalah 1, dan C[1] adalah 1, maka dengan menggunakan rumus di atas, di dapat indeks B adalah 5, sehingga B[5] diisi dengan nilai1, dan C[1] dikurangi 1

A 2 1 4 3 2

B 4 3 2 - 1

C 1 2 3 4

1 2 3 4

(10)

C

1 2 3 4

Langkah 5 : Elemen A[1] adalah 2, dan C[2] adalah 2, maka dengan menggunakan rumus di atas, di dapat indeks B adalah 4, sehingga B[4] diisi dengan nilai2, dan C[2] dikurangi 1

A 2 1 4 3 2 B 4 3 2 2 1 C 0 2 3 4 1 2 3 4 C[3] setelah dikurangi 1 C 0 1 3 4 1 2 3 4

Setelah semua proses dilakukan maka akan diperoleh hasil akhir yang merupakan sebuah array dengan elemen-elemen yang sudah terurut secara

descending. Array tersebut yaitu.

B 4 3 2 2 1

1.3 Algoritma Counting Sort

A. Algoritma Counting Sort Ascending

10

procedure counting_sort_asc(input/output data : A : array of integer, Output B : Array of integer)

VAR I : integer C : array[1..k] of integer ALGORITMA for i  1 to k do c[i]  0 endfor for i  1 to n do c[a[i]]  c[a[i]] + 1 endfor for i  1 to k do c[i]  c[i]+c[i-1] endfor for i  n downto 1 do

(11)

B. Algoritma Counting Sort Descending

procedure counting_sort_asc(input/output data : A : array of integer, output B : Array of integer)

VAR i : integer c : array [1..k] of integer ALGORITMA for i  1 to maks do c[i]  0 endfor for i  1 to maks do c[a[i]]  c[a[i]] + 1 endfor for i  1 to maks do c[i]  c[i]+c[i-1] endfor

(12)

1.4 Kompleksitas Waktu Algoritma Counting Sort a. Kompleksitas waktunya :

1. Operasi pengisian nilai yang terdiri dari a) C[i]  0 = k b) C[A[i]]  C[A[i]]+1 = N c) C[i]  C[i]+C[i-1] = k-1 d) B[C[A[i]]]  A[i]= N e) C[A[i]]  C[A[i]]-1= N Sehingga menjadi : k+N+k-1+N+N = 3N+2k-1 2. Operasi Penjumlahan a) C[A[i]] C[A[i]]+1 = N b) C[i]  C[i]+C[i-1] = k-1 Sehingga menjadi : N+k-1 3. Operasi Pengurangan a) C[A[i]]  C[A[i]]-1= N Sehingga menjadi : N

Total kebutuhan waktunya : 3N+2k-1 + N+k-1 + N = 5N+3k-2 b. Kompleksitas waktu asimptotiknya :

For i=1 to maks do

C[i] 0 ---- O(1)

End For

For i=1 to maks do

C[A[i]]  C[A[i]]+1 ---- O(1) End For

For i=1 to maks do

C[i]  C[i]+C[i-1] ---- O(1) End For

(13)

For i=maks downto 1 do

b[c[a[i]]]  a[i] ---- O(1) c[a[i]]  c[a[i]]-1 ---- O(1) end for

Sehingga menjadi = k. O(1) + N. O(1) + (k-1). O(1) + N. {O(1) + O(1)} = O(k) + O(N) + O(k-1) + N. O(1)

= O(k) + O(N) = O(n)

1.5 Kelebihan dan Kekurangan Counting Sort

Keungggulan algoritma counting sort adalah dapat mengurutkan beberapa bilangan bulat (integer) dengan waktu yang lebih singkat karena tidak adanya proses pembandingan bilangan. Sedangkan kelemahan algoritma counting sort adalah menggunakan array yang terlalu banyak bila

range bilangan sangat berjauhan sehingga akan menghabiskan memori yang

cukup banyak.

1.6 Kesimpulan tentang counting sort

Untuk melakukan pengurutan nilai yang paling sederhana dan paling mudah dimengerti adalah algoritma counting sort namun algoritma ini tidak efektif digunakan pada tabel dengan range yang besar. Dimana semakin besar k, maka kebutuhan memori menjadi sangat besar. Secara lebih mendalam, Counting Sort adalah algoritma pengurutan efektif dan efisien yang melakukan pengurutan dengan ide dasar meletakkan elemen pada posisi yang benar, di mana penghitungan posisi yang benar dilakukan dengan cara menghitung (counting) elemen-elemen dengan nilai lebih kecil atau sama dengan elemen tersebut. Dan memiliki kompleksitas waktu linier O(n). Walaupun tidak dapat digunakan secara

(14)

Daftar Pustaka

Dominikus Damas Putranto. Pengkajian Algoritma Pengurutan-Tanpa Pembandingan Counting Sort dan Radix Sort. ITB (Diakses tanggal 25 November 2012)

Fajar Hari Prabowo. Counting Sort|Algoritma Dasar Pengurutan. Fajar Hari Prabowo’s Blog (Diakses tanggal 25 November 2012)

No Name. Counting Sort

http://www.cse.iitk.ac.in/users/dsrkg/cs210/applets/sortingII/countin gSort/countingSort.html (Diakses tanggal 28 November 2012)

Tridayanti. 2012. Algoritma Counting Sort

http://tridayanti.blogspot.com/2012/03/pengertian-algoritmaserta-kekurangan.html (Diakses tanggal 28 November 2012)

(15)

Referensi

Dokumen terkait

Menggunakan metode algoritma Bubble Sort dengan dua varian pengurutan data yaitu Ascending dan Descending, proses sorting algoritma Bubble Sort tidak memiliki

Algoritma pengurutan adalah proses menyusun kembali rentetan objek-objek untuk meletakkan objekdari suatukumpulan data ke dalam urutan yang logis (Cormen, 2009).Pada

Beberapa algoritma pengurutan (sorting) yang sering digunakan yaitu bubble sort, bidirectional bubble sort, heap sort, shell sort, tree sort, radix sort, merge sort,

Penelitian yang juga dilakukan oleh Tjaru & Setia (2009) yang berjudul Kompleksitas Algoritma Pengurutan Strand Sort dan selection Sort, yang menerangkan bahwa

Sebagai contoh, untuk kasus dimana jumlah masukan untuk suatu pengurutan banyak, lebih baik digunakan algoritma sorting seperti quick sort, merge sort, atau heap sortkarena

Dalam percobaan yang dilakukan didapatkan bahwa algoritma Strand Sort dan Gnome Sort lebih efisien dari algoritma Sieve Sort dengan kompleksitas waktu (Tn) Strand Sort

Strand Sort adalah algoritma pengurutan yang mencari elemen yang tepat untuk.. diletakkan di posisi yang telah diketahui, dan meletakkannya di posisi

Perbandingan pengurutan data (sorting) dalam sebuah array (L) menggunakan dua algoritma dengan prinsip kerja yang berbeda. Metode selection sort menggunakan