Anda di halaman 1dari 5

ISBN No.

978-602-98559-1-3 Prosiding SNSMAIP III-2012

ALGORITMA SORTING BERDASARKAN INDEKS DATA


TANPA MENGGUNAKAN ARRAY PENANDA

Gozalli Achmad Irawan, dan Machudor Yusman

Ilmu Komputer FMIPA Universitas Lampung1,2


Email: Gozalli.achmad.irawan@gmail.com1, Machudoryusman@yahoo.com2

ABSTRAK

Konsep pengurutan (sorting) merupakan salah satu bagian dasar dari algoritma yang
berhubungan dengan struktur data. Beberapa algoritma pengurutan yang dikenal
antara lain Bubble Sort, Quick Sort, Merge Sort, Heap Sort, Insersion Sort, dan Radix
Sort, melakukan pengurutan data dengan mengubah kedudukan data awal.
Penelitian lain melakukan pengurutan data dengan menggunakan tiga buah array
sebagai penyimpan data awal, penyimpan data indeks data terurut, dan penyimpan
tanda larangan (Machudor, 2012). Pada penelitian ini dikembangkan algoritma
sorting dengan memanfaatkan konstruksi indeks array untuk melakukan pengurutan.
Algoritma ini memerlukan dua array, yaitu: array data awal (X) dan array indeks (Y)
dengan panjang masing-masing array sebesar n. Hasil pengurutan dapat dilakukan
dengan menampilkan data berdasarkan indeks yang telah terurut.

Kata kunci: algoritma, array, indeks data, pengurutan

1. PENDAHULUAN penanda posisi data tersebut berada.


Indeks data dalam sebuah array dapat
Dalam mencari solusi untuk sebuah berupa bilangan integer atau set
masalah, digunakan algoritma-algoritma karakter. Indeks awal array dimulai
tertentu untuk mendapatkan hasil yang dengan sebuah bilangan tertentu atau
diinginkan. Sebuah algoritma memiliki karakter tertentu dan indeks selanjutnya
langkah-langkah yang teratur untuk adalah urutan dari indeks awal data
dilakukan dari awal tahap hingga akhir. array dengan penambahan atau
Pengurutan merupakan salah satu pengurangan satu. Indeks array yang
bagian yang banyak digunakan dalam lazim digunakan adalah bilangan integer
banyak algoritma. Dalam kasus tertentu, dengan indeks awal 0 dan indeks
teknik pengurutan sangat penting berikutnya adalah (1,2,3..n). Gambar 1
karena mempengaruhi kinerja, running memperlihatkan contoh struktur array.
time, maupun kapasitas memori yang
digunakan. Telah banyak algoritma Indeks 0 1 2 3 ... n
pengurutan yang digunakan, seperti Data(x) 26 31 42 80 ... X[n]
Bubble, Quick, Merge, Heap, Insersion,
dan Radix. Pada algoritma tersebut
Gambar 1 Struktur Array
pengurutan dilakukan dengan merubah
kedudukan data awal. Penelitian yang Pada penelitian ini meman-faatkan
telah dilakukan selanjutnya konstruksi indeks pada array untuk
menggunakan indeks data pada array pengurutan. Dengan memanfaatkan
untuk digunakan dalam proses bantuan satu array tambahan sebagai
pengurutan (Machudor, 2012). penyimpan indeks bilangan terbesar,
maka tidak perlu melakukan perubahan
Array merupakan sebuah kumpulan data pada array bilangan. Dengan
bertipe sama yang tersusun dalam satu penggunaan dua array, algoritma ini
larik dengan panjang tertentu. Tiap data menghemat penggunaan memori pada
dalam array memiliki sebuah indeks running time bila dibandingkan dengan
yang merupakan pengenal atau
44
ISBN No. 978-602-98559-1-3 Prosiding SNSMAIP III-2012

algoritma sebelumnya yang tersebut juga belum tercatat dalam array


menggunakan tiga buah array. Y), maka bilangan tersebut dijadikan
inisial untuk bilangan terbesar.
Setelah semua semua bilangan
2. PEMBAHASAN telah dicek, indeks bilangan terbesar
dimasukkan kedalam array Y.
Array X ditentukan dengan mambaca Lakukan kembali proses 2
data dari file maupun dengan input sampai 4 hingga seluruh indeks array X
manual pada layar. Panjang array X telah tercatat pada array Y.
adalah n yaitu dari banyak data yang Data terurut dicetak dengan
dibaca maupun dimasukkan secara menampilkan data X[Y[i]], untuk
manual ataupun dari data base. i=1,2,…,n.
Pengurutan dilakukan dengan bantuan
array Y dengan panjang array adalah n.
Array Y diisi dengan indeks bilangan Model Algoritma
pada array Y yang telah terurut dari
bilangan terbesar hingga bilangan Dari langkah-langkah pada sub A, dibuat
terkecil. Dari setiap data pada array X, pemodelan algoritma agar dapat
dilakukan pengecekan untuk diimplementasikan dalam bentuk
menentukan bilangan terbesar. Indeks komputasi. Algoritma untuk tiap langkah-
bilangan terbesar pada array X dicatat langkah tersebut dituliskan sebagai
dan dimasukkan ke dalam array Y. berikut:
Pengecekan dilakukan kembali pada
array X untuk mencari bilangan terbesar, Inisialisasi data pada array X
namun pada pengecekan ini, dilakukan
pencocokan indeks pada array Y, For a:=1 to n do input X[a]
apabila indeks bilangan pada array X
telah tercatat dalam array Y, maka Tahap pengurutan
pengecekan untuk indeks tersebut
dilewatkan sehingga setiap indeks Pengecekan indeks yang telah tercatat
hanya akan tercatat satu kali saja.
Dilakukan pengecekan untuk tiap a  index array X
bilangan array X hingga tiap indeks flag  0
for b:=1 to length(arrayY) do
pada array X tercatat dalam array Y. if Y[b]=a then flag:=1
end if
Konsep Algoritma end for
if flag=1 then skip a
Pada algoritma ini, pengurutan end if
dilakukan dengan tidak melakukan
perubahan struktur pada data awal. Pada algoritma diatas, flag
Langkah pembentukan algoritma ini berfungsi untuk penanda apakah indeks
adalah sebagai berikut data pada array X sudah tercatat dalam
Inisialisasi array Y dengan panjang array array Y. Flag diinisialisasikan dengan
adalah banyaknya data pada array X. nilai 0 yang berarti indeks tidak cocok
Lakukan pengecekan pada array X dengan data array Y, dan nilai 1 berarti
untuk mendapatkan bilangan terbesar. terdapat data pada array Y yang cocok
Untuk tiap indeks pada array X, dengan indeks. Apabila flag bernilai 1,
dilakukan pencocokan terhadap data maka proses pengecekan untuk indeks
pada array Y. Apabila terdapat data saat itu dilewatkan (skip).
pada array Y yang sama dengan indeks
array X pada saat ini, maka pengecekan Inisialisasi bilangan terbesar
bilangan terbesar untuk indeks ini
dilewatkan. Flag21
For a:=1 to length(X) do
Untuk tiap bilangan yang dicek, Cek_indeks;
If flag2=1 then
dilakukan pengecekan untuk mencari indexMax:=a;flag2=0;
bilangan terbesar. Apabila bilangan end if
tersebut merupakan indeks pertama end for
yang dicek (indeks pada bilangan
45
ISBN No. 978-602-98559-1-3 Prosiding SNSMAIP III-2012

Pada bagian ini, cek_indeks adalah if flagSkip=1 then


fungsi pada tahap 1 yaitu untuk continue;end if{lanjutkan ke
melakukan pengecekan indeks yang indeks berikutnya}
if flagfirst=1 then
telah tercatat. Inisialisasi tidak dilakukan maxIndex:=a
apabila nilai a (indeks saat itu) telah else if
tercatat pada array Y. X[maxIndex]<X[a] then
maxIndex:=a;end if end
else
Penentuan bilangan terbesar end if
n  length(X); end for
while Y[n]<>null do Y[indexY]:=maxIndex;
maxIndex  0; Inc(indexY);
indexY1; end while
for a:=1 to n do
cek_indeks;
inisialisasi(maxIndex); keterangan: tanda () menunjukkan
if X[maxIndex]<X[a]
then
inisialisasi nilai.
maxIndex:=a;
end if
end for Flowchart
Y[indexY]:=maxIndex;
Inc(indexY);
end while flagFirst:=1;

Pada proses ini, indeks bilangan Input nilai array X;


terbesar disimpan dalam array Y. N := length(X);
indexY:=1
a:=1 to n

Proses dilakukan hingga semua indeks


pada array X terisi penuh atau indeks flagSkip:=0;
akhir pada array Y telah terisi Y[n]<>null?
flagFirst=1

(Y[n]<>null).
b:=1 to
length(Y)

Pencetakan data terurut X[maxIndex]


<X[a]
For a:=1 to length(Y) do write Y[b]=a

X[Y[a]]
maxIndex=a;
end if
b

maxIndex=a;
Algoritma dan Flowchart flagFirst=0;

a
Algoritma
Secara langkah-langkah algoritma yang Y[indexY]=maxIndex;
Inc(indexY);
telah dijelaskan pada sub B, secara
keseluruhan algoritma tersebut
dituliskan sebagai berikut:

X  array X
Implementasi
Y  array Y
n  length (X) Dari algoritma yang telah dijelaskan
indexY  1 sebelumnya, dibuat program dalam
while (Y[n]<>null) do bahasa Perl dengan menggunakan
maxIndex 0; flagFirst1; compiler perl versi 5.12.3. Berikut listing
for a:=1 to n do
program yang telah dibuat:
flagSkip0;
for b:=1 to
use strict;
length(Y) do
print "input: ";
if Y[b]=a
my $line=<STDIN>;
then flagSkip:=1;
end do

46
ISBN No. 978-602-98559-1-3 Prosiding SNSMAIP III-2012

chomp($line); Selanjutnya, dilakukan pengecekan


$line=~s/\s+//g;$line=~s/,$//; pada array A dari indeks 1 sampai 10
$line=~s/,+/,/; sehingga ditemukan bilangan terbesar
my @data = split (/,/,$line);
adalah 9. Terdapat dua buah index
my @index; dengan nilai 9, yaitu pada indeks ke 2
dan 7, dalam hal ini indeks yang lebih
while dulu terbaca akan diambil sebagai
(scalar(@data)!=scalar(@index) indeks bilangan terbesar. Pada akhir
) iterasi pertama, nilai 2 (indeks ke 2)
{my $first=1;my $maxIdx;
dimasukkan kedalam array Y.
for (my
$a=0;$a<scalar(@data);$a++)
{my $flag=0; i 1 2 3 4 5 6 7 8 9 10
for (my
X[i] 8 9 3 6 7 2 9 5 8 7
$b=0;$b<scalar(@index);$b++)
{if
($index[$b]==$a)
i 1 2 3 4 5 6 7 8 9 110
{$flag=1;last; Y[i] 2
}
}
if Langkah berikutnya, diulangi seperti
($flag==1){next;} langkah sebelumnya, namun pada kali
if ini tiap indeks array X yang sedang
($first==1){$maxIdx=$a;$first=
diproses, dicocokkan terhadap isi data
0;}
else {if pada array Y. apabila ada data dalam
($data[$maxIdx]<$data[$a]){$ma array Y yang sama dengan posisi indeks
xIdx=$a;}} array X saat itu, maka elemen pada
} index array X tersebut tidak dilakukan
push(@index,$maxIdx); pengecekan. Dalam hal ini index ke 2
} pada array X dilewatkan karena sudah
tercatat dalam array Y. Iterasi ini
print "sorted: ";
foreach my $z (@index)
menghasilkan nilai berikut:
{print "$data[$z],";}
i 1 2 3 4 5 6 7 8 9 10
Contoh Proses X[i] 8 9 3 6 7 2 9 5 8 7
Ditentukan sebuah array X yang berisi
10 data integer sebagai berikut:
i 1 2 3 4 5 6 7 8 9 110
i 1 2 3 4 5 6 7 8 9 10 Y[i] 2 7
X[i] 8 9 3 6 7 2 9 5 8 7
Iterasi dilakukan berulang hingga array
Y terisi penuh dan menghasilkan proses
Pada array tersebut akan diurutkan dari
akhir sebagai berikut:
bilangan terbesar hingga terkecil.
Proses pertama adalah inisialisasi
bilangan terbesar. Karena Y belum i 1 2 3 4 5 6 7 8 9 10
berisi data, maka X[i] diinisialisasi
sebagai bilangan terbesar. X[i] 8 9 3 6 7 2 9 5 8 7

i 1 2 3 4 5 6 7 8 9 10
i 1 2 3 4 5 6 7 8 9 10
X[i] 8 9 3 6 7 2 9 5 8 7
Y[i] 2 7 1 9 5 10 4 8 3 6
i 1 2 3 4 5 6 7 8 9 10

Y[i] Hasil running program ditunjukkan pada


tabel berikut:

max=8, index=1

47
ISBN No. 978-602-98559-1-3 Prosiding SNSMAIP III-2012

i 1 2 3 4 5 6 7 8 9 1 Antony Pratama. (2002). Algoritma


0 dan Pemrograman. Edisi Kedua. J
& J Learning Yogyakarta.
X[i] 8 9 3 6 7 2 9 5 8 7
Baase, Sara. 2000. Computer Algorithm.
Y[i] 2 7 1 9 5 1 4 8 3 6
San Diego University.
0
Budi Sutejo. 2002. Algortima & Teknik
X[Y[i 9 9 8 8 7 7 6 5 3 2 Pemrograman. Konsep
]] Implementasi Aplikasi. Edisi ke
dua, Andi Offset, Jogjakarta.
Fathul Wahid. (2004). Dasar-Dasar
3. SIMPULAN DAN SARAN Algoritma dan Pemrograman. Edisi
A. Simpulan Pertama. Andi Offset Yogyakarta.
Berdasarkan implementasi program dan Graham, R.N., Knuth, D.E., and
hasil pembahasan satu kasus maka Patashnik, O. (1980). Concrete
dapat disimpulkan bahwa dapat Mathematics. Addison-Wesley
ditampilkan hasil proses sorting Publishing Company, USA.
menggunakan indeks dari tempat data
awal tanpa merubah tempat dan nilai Jogianto H.M. (1990). Teori dan
data awalnya. Aplikasi, Pemrograman Komputer
Bahasa Basic. Edisi keempat, Andi
B. Saran Offset Yogyakarta.
Disarankan kepada para peneliti untuk Machudor Yusman, 2012. Konstruksi
mengembangkan ide-ide yang lain Algoritma Sorting Berdasarkan
dalam hal sorting data yang tentunya Indeks Data. Prosiding. Univetsitas
dapat lebih baik dari segi efisiensi Negeri Medan, Medan.
perintah maupun variabel yang
digunakan. Michael AN. (2002). Algoritma &
Teknik Pemrograman, Konsep
Implementasi Aplikasi. Edisi Kedua.
UCAPAN TERIMAKASIH Andi Offset Yogyakarta.
Rinaldi Munir dan Leoni Lidya. (2002).
Penulis mengucapkan terima kasih Algoritma dan Pemrograman dalam
kepada Jurusan Ilmu Komputer dan Bahasa Pascal dan C . Cetakan
Fakultas MIPA UNILA yang telah Ketiga. CV Informatika Bandung.
mendanai kegiatan ini.
Suarga. (2006). Algoritma dan
Pemrograman. Edisi Pertama. Andi
PUSTAKA Offset Yogyakarta.
Wadih, Fathul. 2004. Dasar-dasar
Andri Kristanto (2003). Algoritma dan Algoritma dan Pemrograman.
Pemrograman dengan C++ . Edisi Penerbit ANDI, Yogyakarta.
Pertama. Graha Ilmu Yogyakarta. Yulikuspartono. (2004). Pengantar
Logika dan Algoritma. Edisi
Pertama. Andi Offset Yogyakarta.

48

Anda mungkin juga menyukai