Anda di halaman 1dari 91

Algoritma Pemrograman

Apakah Algoritma itu ?


Kata Algorism berasal dari nama penulis buku Arab yang terkenal, Abu Jafar Muhammad
ibnu Musa al-Kuwarizmi, Dalam bukunya yang berjudul Kitab al jabr walmuqabala, yang
artinya Buku Pemugaran dan Pengurangan ( The book of restoration and redution
).
Menurut Donald. E Knuth dalam bukunya yang berjudul The Art o !omputer "rogramming,
algoritma harus mempunyai lima #iri penting $
%. Algoritma harus berhenti setelah mengerjakan sejumlah langkah&langkah yang telah
ditentukan.
'. (etiap langkah yang telah ditentukan harus terdeinisi dengan jelas dan tepat sehingga
tidak mempuntyai arti ganda.
). Algoritma dapat mempunyai * ( nol ) atau lebih masukan ( input )
+. Algoritma dapat mempunyai * ( nol ) atau lebih keluaran ( output )
,. Algoritma harus eekti dan sederhana sehingga dapat dikerjakan dengan -aktu yang
masuk akal.
Dalam Kamus .esar .ahasa /ndonesia terbitan .alai "ustaka %011, dikatakan bah-a $
Algortima adalah urutan logis pengambilan keputusan untuk pemecahan masalah.
Algoritma sangat penting di dalam /lmu Komputer atau
/normatika, banyak #abang ilmu komputer yang dalam
proses penyelesaiannya menggunakan algoritma. 2amun
demikian jangan beranggapan algoritma itu selalu identik
dengan komputer. Karena dalam kegiatan sehari&haripun
dapat kita temui istilah algoritma.
(eperti misalnya $
algoritma untuk merakit komputer,
Algoritma untuk menjadi mahasis-a teladan, dll.
Agar algortima dapat diproses oleh komputer, maka algoritma tersebut harus di nyatakan
dalam bentuk program. Dengan kata lain bah-a program adalah implementasi dari
algoritma.
Agar mudah untuk menggambarkan algoritma, maka diperlukan alat&alat untuk
mengggambarkan algoritma tersebut. 2amun demikian hal inipun siatnya tidak mutlak,
Halaman 1
Pendahuluan
Algoritma Pemrograman
dapat saja si pemakai menggambarkan algoritma dengan kata&katanya sendiri selama
beberapa ketentuan dan aturan khusus dapat dipenuhi.
Pemrogramman
"emrogramman adalah merupakan langkah untuk menulis algoritma yang dapat dimengerti
oleh komputer.
3angkah&langkah dalam "emrogramman Komputer
%. Mendeinisikan Masalah
"ada tahapan ini di#ari apa masalahnya 4, apa yang harus dipe#ahkan oleh komputer 4,
bagaimana masukan dan keluarannya 4.
'. Menentukan (olusi
(etelah permasalahannya dideinisikan dengan jelas, masukan dan keluaran yang
diminta juga jelas, maka tahap selanjutnya adalah men#ari jalan bagaimana
permasalahan tersebut dapat dipe#ahkan. Apabila permasalahan yang akan diselesaikan
#ukup kompleks maka penyelesaiannya dipe#ah ke dalam program&program yang lebih
ke#il yang dinamakan dengan "rosedur arau 5ungsi.
). Memilih Algoritma
Tahap ini merupakan tahap pemilihan solusi yang telah ditemukan pada tahap
sebelumnya.
(olusi dituliskan dalam langkah&langkah penyelesaian masalah. Memilih algoritma yang
baik menjadi sangat penting karena algoritma yang baik akan menghasilkan unjuk kerja
program yang baik pula.
+. Menulis "rogram
(etelah algoritma dipilih, selanjutnya adalah menuliskan programnya sesuai dengan
bahasa pemrograman yang digunakan.
,. Menguji "rogram
(etelah penulisan program selesai, selanjutnya adalah menguji program tersebut apakah
sudah dapat dikompilasi dengan baik, jika sudah selanjunya adalah apakah sudah
menghasilkan keluaran yang sesuai dengan kebutuhan. 6ntuk mendapatkan hasil yang
maksimal, pengujian program sebaiknya menggunakan kasus&kasus yang banyak.
7. Menulis Dokumentasi
Tahap ini biasanya dilakukan bersamaan dengan tahapan menulis program. "ada setiap
baris program diberi komentar sedemikian rupa sehingga dapat menerangkan apa yang
dilakukan oleh baris program tersebut. 8al ini diperelukan pada saat perbaikan atau
perubahan program pada -aktu yang akan datang.
9. Mera-at "rogram
Tahap ini dilakukan untuk menjaga keberlangsungan program yang sudah dibangun.
.iasanya untuk mendeteksi adanya BUG yang tidak terdeteksi sebelumnya.
Halaman 2
BAB I
Algoritma Pemrograman
DATA
Tes Kemampuan Awal
%. Apakah deinisi algortima dan "emrogramman 4
'. :elaskan dan tuliskan apa yang dimaksud dengan $
a. Tipe data dasar
i. .ilangan 3ogik
ii. .ilangan .ulat
iii. .ilangan ;iil.
i<. Karakter
b. Tipe data bentukan
i. (tring
ii. ;e#ord
). Apa saja yang dapat diberi nama dalam sebuah program 4
+. Apa yang anda ketahui mengenai $
a. "engisian harga sebuah <ariabel dengan #ara "enugsan,
b. "engisian harga sebuah <ariabel dengan #ara /nput de<i#e,
,. Apa yang anda ketahui mengenai istilah ekspresi dalam penulisan 4
Halaman 3
Algoritma Pemrograman
DATA
6ntuk mengenal lebih jauh tentang data yang sering digunakan dalam komputasi, maka ada
beberapa hal yang perlu diketahui.
1.1. Tipe Data
Tipe Data dapat dikelompokan menjadi atas dua ma#am tipe yaitu $
Tipe Dasar
Tipe .entukan.
Tipe Dasar adalah tipe yang langsung dapat dipergunakan, sedangkan tipe bentukan
dibangun dari tipe dasar atau dari tipe bentukan lain yang sudah dideinisikan terlebih
dahulu.
1.1.1. Tipe Data Dasar
Tipe Dasar Data terdiri dari $
bilangan logik,
bilangan bulat,
bilangan riil,
karakter.
1.1.1.1. Bilangan Logik
.ilangan logik hanya mengenal ' ma#am nilai yaitu $
True ( .enar )
5alse ( (alah )
.ilangan ini sering juga dinamakan sebagai bilangan Boolean. /stilah bilangan untuk
bilangan logik ini karena kondisi Benar dapat dinyatakan dengan bilangan % dan !alah
dinyatakan dengan bilangan *.
Tipe bilangan logik dideinisikan sbb $
2ama $ boolean
Daerah $ 5alse, True
Misal $ 5alse, True
=perator $ not, and, or, >or
Halaman 4
Algoritma Pemrograman
=perasi dengan bilangan logik menghasilkan bilangan logik. :ika a dan b adalah <ariable
yang bertipe boolean, maka hasil operasi a dan b dengan operator boolean tersebut adalah
seperti dalam tabel di ba-ah ini $
a b
true alse
alse true
a b a and b a or b a >or b
True True True True 5alse
True 5alse 5alse True True
5alse True 5alse True True
5alse 5alse 5alse 5alse 5alse
And hanya akan bernilai benar jika kedua&duanya benar
Or hanya akan bernilai salah jika kedua&duanya salah
or hanya bernilai salah jika kedua&duanya sama
!ontoh $
A ? True
. ? True
2ot A ? 5alse
2ot A and . ? 5alse
A =r 2ot . ? True
1.1.1.!. Bilangan Bulat
.ilangan bulat adalah bilangan yang tidak mengandung bilangan pe#ahan dalam
penyajiannya. Misalnya $ 7+, 0+99,, & 7+7, *, dsb.
Dalam algoritma, tipe bilangan bulat dideinisikan sbb $
2ama $ /nteger
Daerah $ /
Misal $ 7+, & ,1, )1+,7, *, )+++
=perator $
a) =perator Aritmatik
@ tambah
& kurang
A kali
B bagi
di< hasil bagi
mod sisa bagi
b) =perator ;elational B "erbandingan
Halaman 5
Algoritma Pemrograman
< lebih ke#il
lebih ke#il sama dengan
> lebih besar
lebih besar sama dengan
= sama dengan
tidak sama dengan
Dalam kenyataannya, bilangan bulat mempunyai daerah yang tidak terhingga ( & , ).
=perasi aritmatika bilangan bulat dengan operator bilangan bulat menghasilkan nilai yang
bertipe bilangan bulat juga.
Ada , tipe data yang termasuk dalam kelompok integer ini. Kelima tipe data tersebut
adalah $
Tipe Batas "ilai #kuran dalam b$te
.yte
(hortint
/nteger
Cord
3ongint
*..',,
&%'1..%'9
&)'971..)'979
*..7,,),
&'%+9+1)7+1.. '%+9+1)7+9
%
%
'
'
+
!ontoh operasi aritmatika bilangan bulat $
%) @ %* hasil ')
17 & %7 hasil 9*
' A 1 hasil %7
+1 di< ) hasil %7
+1 mod ) hasil *
+, mod ) hasil *
=perasi aritmatik dengan operator relational menghasilkan nilai boolean (benar atau salah)
!ontoh operasi relasional $
, < 7 benar
+, +, benar
,7 > ,7 salah
), ), benar
)7 = )7 benar
)1 ,1 benar
1.1.1.%. Bilangan &iil
Halaman 6
Algoritma Pemrograman
Tipe bilangan riil dideinisikan sbb $
2ama $ real
Daerah $ ;
Misal $ *. 71. )9.+ 79.+, *.)+,7 7E&7 &+.7
=perator $
a) =perator Aritmatik
@ tambah
& kurang
A kali
B bagi
b) =perator ;elational B
"erbandingan
< lebih ke#il
lebih ke#il sama dengan
> lebih besar
lebih besar sama dengan
tidak sama dengan
(emua bilangan riil harus mengandung D.E ( titik ).
2ilai 0 dianggap bilangan bulat, tetapi 0. dianggap bilangan riil.
.ilangan riil dapat juga dituliskan dengan notasi E yang artinya perpangkatan sepuluh.
Misalnya #ontoh 7E&7 artinya 7 > %*
&7
.
.ilangan .ulat ataupun bilangan ;iil keduanya dinamakan tipe numerik.
Ada , tipe data yang termasuk dalam kelompok real ini. Kelima tipe data tersebut adalah $
Tipe Batas "ilai
Angka
'igni(ikan
#kuran
dalam b$te
;eal
(ingle
Double
E>tended
!omp
'.0 > %*E&)0.. %.9 > %*E&)1
%., > %*E&+,.. ).+ > %*E&)1
,.* > %*E&)'+.. %.9 > %*E&)*1
%.0 > %*E&+0,%.. %.% > %*E&+0)'
&'E7) @ %.. &'E7) &%
%% F %'
9 F 1
%, F %7
%0 F '*
%0 F '*
7
+
1
%*
1
=perasi aritmatik dengan salah satu operandnya bertipe bilangan riil dinamakan operasi
#ampuran dan menghasilkan nilai dalam daerah bilangan riil.
!ontoh operasi aritmatik bilangan riil $
9., @ +.9 hasil %).'
Halaman 7
Algoritma Pemrograman
1.* & ).9 hasil +.)
0 B + hasil '.',
%, B '., hasil 7.*
(eperti halnya pada tipe bilangan bulat, operasi relasional dengan bilangan riil
menghasilkan nilai boolean.
!ontoh operasi relasional $
*.*79 < )+ benar
0.9* ,.7 benar
1.97 1.97 salah
=perasi bilangan riil tidak mengenal operator ? G karena bilangan riil tidak dapat
direpresentasikan se#ara benar oleh komputer. Misalnya %B) ? *.))))H.. dengan angka )
yang tidak pernah berhenti. .iasanya dalam perhitungan komputer dibulatkan sesuai
dengan batasan jumlah digit dibelakang koma yang dipakai. 2amun demikian, %B) tidaklah
sama dengan *.)))).
Dengan alasan ini maka operator ? tidak digunakan untuk operasi bilangan riil.
1.1.1.). Karakter
Tipe Karakter dideinisikan sbb $
2ama $ #har
Daerah $ ( *,%, HH..,0, a, b, #, HH.. ,I, A,., HHH, J, D D, K, L, M, N, O, dan karakter
khusus lainnya. ( symbol A(!// )
Misal $ DhE, DPE, D%E, A , dll.
=perator $ relasional
< lebih ke#il
lebih ke#il sama dengan
> lebih besar
lebih besar sama dengan
tidak sama dengan
? sama dengan
(eperti pada tipe bilangan bulat, karakter mempunyai keterurutan (su##essor B sesudah dan
prede#essor B sebelum ) yang ditentukan #ara pengkodeannya di dalam komputer.
!ontoh operasi #hara#ter $
A ? a salah
5 ? 5 benar
K Q . benar
R S D salah
1.1.!. Tipe Data Bentukan
Halaman 8
Algoritma Pemrograman
Tipe bentukan dibangun dari beberapa elemen yang bertipe dasar atau dari tipe bentukan
lain yang sudah dideinisikan terlebih dahulu. =perasi terhadap elemen bertipe dasar
dilakukan seperti halnya pada tipe dasar. Tipe bentukan seringkali disebut juga tipe
terstruktur . Tipe bentukan diberi nama oleh programmer.
1.1.!.1. 'tring
!tring adalah deretan karakter dengan panjang tertentu. Tipe string dideinisikan sbb $
2ama $ string
Daerah $ deretan karakter yang dideinisikan pada daerah karakter
Misal $ D.A2D62TE, D(TM/K&M/E, D:l. (oekarno & 8atta ')7E
(emua string harus diapit oleh tanda petik tunggal.
=perator $
a) "enyambungan
@
b) ;elasional
< lebih ke#il
lebih ke#il sama dengan
> lebih besar
lebih besar sama dengan
tidak sama dengan
? sama dengan
=perator D@E disini bukanlah operator penjumlahan seperti pada tipe numerik ( integer atau
real ). =perator D@E berarti penyambungan. .ila a dan b adalah peubah bertipe string, maka
a @ b sama dengan ab.
!ontoh $
DTeknikE@D/25=;MAT/KAE ? DTeknik/25=;MAT/KAE
DTeknikE@DU/25=;MAT/KAE ? DTeknikU/25=;MAT/KAE
D>>>E @ DUyyy + zzz = xxxUyyyIIIE
D%E @ D'E ? D%'E
=perator relasional, seperti pada karakter, menghasilkan nilai boolean (benar atau salah).
!ontoh $
DEghE ? DegE salah
DsayaE S D(APAE salah
(tring yang terdiri dari angka dan huru sering dinamakan dengan alfanumerik .
Halaman 9
Algoritma Pemrograman
1.1.!.!. &ecord * &ekaman
(ebuah re#ord B rekaman disusun oleh satu atau lebih ield. Tiap ield berisi data dari tipe
dasar tertentu atau tipe bentukan lain yang sudah dideinisikan terlebih dahulu. 2ama
re#ordBrekaman ditentukan oleh programmer.
(ebuah rekaman B re#ord dengan tiga buah ield jika digambarkan se#ara logic adalah sbb $
+ield1 +ield! +ield%
!ontoh $
Mendeinisikan tipe bentukan yang menyatakan data mahasis-a. Data mahasis-a terdiri
atas 2/M, 2ama dan 6sia.
Misalkan tipe bentukan ini dinamakan M8(.
Type M8( $ re#ord V 2/M $ integer, nama $ string, usia $ integer W
:ika dideklarasikan M adalah <ariable bertipe M8(, maka #ara menga#u tiap ield pada
re#ord B rekaman M adalah $
M.2im
M.2ama
M.usia
2ama $ M8(
Daerah $ sesuai dengan daerah masing&masing ield
Misal $ V 9+)7,1)1,, D6#i (anusiE, 90 W
V 7+0+7*+1,, D6nang hermansyah, )+ W
=perator $ Tidak ada operator untuk M8( tetapi kita dapat melakukan $
- operasi integer terhadap M8(.2/M
- operasi string terhadap M8(.nama
- operasi real terhadap M8(.usia
1.!. "ama
Di dalam program, sesuatu yang diberi nama dapat berupa $
%. Xariable ( "eubah )
'. !onstant ( Tetapan )
). Tipe seperti yang telah dijelaskan
+. 5ungsi yang digunakan ( dijelaskan kemudian )
,. "rosedur yang digunakan ( dijelaskan kemudian )
Dalam penulisan program, ada beberapa aturan penulisan nama yang harus dipenuhi.
%. 8arus selalu dia-ali dengan huru ( alabet )
'. 8uru besar atau huru ke#il tidak dibedakan
). Karakter penyusun nama hanya terdiri dari alabet, angka, garis ba-ah ( D U D ).
Halaman 10
Algoritma Pemrograman
+. Tidak boleh ada spasi yang memisahkan string yang disusun.
,. "anjang nama tidak dibatasi.
!ontoh yang salah $
9PA2T karena dimulai dengan angka
nilai 6A( karena ada spasi
23&% karena ada operator kurang
L(atu karena ada karakter khusus
. ' karena ada spasi
!ontoh yang benar
PA2TU9
nilai6A(
23%
(atu
.'
1.%. ,arga
8arga adalah nilai besaran dari tipe yang sudah dikenal. 8arga dapat berupa nilai yang
dikandung oleh nama <ariable atau -onstant ( tetapan ).
1.%.1. Pengisian ,arga ke dalam .ariable
8arga dapat diisikan ke dalam <ariable dengan #ara "enugasan B assigment
1.%.1.1. Penugasan
"enugasan adalah mengisikan sebuah harga pada <ariable se#ara langsung. "roses
penugasan biasanya dalam algoritma dapat digambarkan dengan lambang DE atau D ? D.
8arga yang dimasukan ke dalam <ariable dapat juga di ambil dari <ariable yang lain selama
tipe data yang dimasukan sama dengan tipe nama yang akan dimasukinya.
!ontoh 2otasi Algoritma untuk penugasan $
2ama tetapan ( harga tetapan diisikan ke dalam nama )
2ama% nama' (harga nama' disalin ke nama%, nama% sama dengan nama')
2ama ekspresi ( hasil perhitungan diisikan ke dalam nama )
Atau
2ama ? tetapan ( harga tetapan diisikan ke dalam nama )
2ama% ? nama' (harga nama' disalin ke nama%, nama % sama dengan
nama')
2ama ? ekspresi ( hasil perhitungan diisikan ke dalam nama )
Halaman 11
Algoritma Pemrograman
1.%.1.!. /nput ,arga dari /nput de0ice
8arga untuk 2ama <ariable dapat diisi dari peralatan input misalnya keyboard.
Mengisi harga dari input de<i#e dinamakan operasi pemba#aan data. /stilah ba#a ini timbul
karena komputer seakan&akan memba#a harga yang diberikan oleh pemakai.
Dalam Algoritma perintah untuk pemba#aan data dilakukan dengan perintah input .
!ontoh $
/nput ( nilai%)
(yaratnya adalah nilai% adalah nama <ariable, tidak boleh nama tetapan B #onstant.
Ketika perintah di atas dilaksanakan, komputer menunggu pemakai mengetikan harga nila%
dari input de<i#e.
.ila diketikan angka 07 lalu diikuti dengan tombol SenterQ, maka tempat dimemori yang
bernama nilai% sekarang berisi 07.
1.%.!. 1kspresi
(uatu harga dipakai untuk proses transormasi menjadi keluaran yang diinginkan.
Transormasi harga menjadi keluaran dilakukan melalui suatu perhitungan ( komputasi ).
!ara perhitungan itu dinyatakan dengan suatu ekspresi.
(uatu ekspresi terdiri dari o"erand dan o"erator #"erand adalah harga yang dioperasikan
dengan o"erator tertentu. O"erand dapat berupa nama <ariable atau #onstant B tetapan.
8asil perhitungan adalah harga dengan daerah yang sesuai dengan tipe o"erator yang
dipakai.
Ekspresi dikenal dalam dua ma#am $ Ekpresi 2umerik dan Ekspresi .olean.
1.%.!.1. 1kspresi "umerik
Ekspresi 2umerik adalah ekspresi yang baik operand- nya bertipe numerik dan hasilnya
juga bertipe numerik.
Misalkan diinisialisasikan B kamus sbb $
Kamus
a, b, # $ real
d $ integer
e, , g $ integer
!ontoh Ekspresi 2umerik $
a > b
8asil perhitungan juga bertipe real. "ada ekspresi ini, operand&nya adalah a dan b
sedangkan operatornya adalah > G ( perkalian ). .ila hasil perhitungan disimpan ke dalam
Halaman 12
Algoritma Pemrograman
nama <ariable, maka nama <ariable haruslah bertipe sama dengan tipe hasil. "engisian
hasil ekpresi a > b ke dalam <ariable # melalui penugasan $
# a > b
atau
# ? a > b
1.%.!.!. 1kspresi &elasional
Ekpresi relational adalah ekspresi dengan operator <, >, , , = dan .8asil ekpresinya
selalu bernilai boolean.
/nisialisasi B identiikasi kamusnya adalah $
Kamus
Ada, Ketemu, besar $ boolean
>, y $ integer
!ontoh $
2ot ada hasil alse
ada and true hasil true
> S , hasil alse
ada or ( > ? y ) hasil true
1.%.%. Output ,arga
8arga yang disimpan di dalam memori dapat ditampilkan ke output de<i#e. "erintah
penulisan harga adalah dengan perintah output.
!ontoh $
=utput (nama%)
=utput (#onstant)
=utput (ekpresi)
Halaman 13
BAB II
Algoritma Pemrograman
'T&#KT#& AL2O&/T3A DA" ALAT P1"22A3BA&A" "4A
Tes Kemampuan Awal
%. Apa yang anda ketahui mengenai struktur algoritma $
a. ;untunan B (eYuen#e
b. "emilihan B (ele#tion
#. "engulangan B 3ooping
'. Apa yang anda ketahui mengenai alat penggambaran algoritma $
a. (istem 5lo-#hart,
b. "rogram 5lo-#hart.
#. 2assi (#hneiderman,
d. "seudo#ode
). Apa yang anda ketahui mengenai bagian algoritma $
a. .agian Kepala Algoritma,
b. .agian Deklarasi,
#. .agian Deskripsi.
+. .uatlah Algoritma dengan menggunakan 5lo-#hart, 2s Diagram dan "seudo#ode
untuk menampilkan deret angka seperti diba-ah ini $
a. %, ', ), +, ,, H..,n
b. %, ), ,, 9, 0, H..,n
#. ', +, 7, 1, %*, H,n
d. %, ,, 0, %), HH.,n
,. .uatlah Algoritma dengan menggunakan 5lo-#hart, 2s Diagram dan "seudo#ode
untuk men#ari jumlah masing&masing deret yang ada pada (oal 2o. %.
Halaman 14
Algoritma Pemrograman
!.1. 'truktur Algoritma
Algoritma adalah rangkaian langkah&langkah yang logis untuk menyelesaikan masalah.
Ada tiga struktur dasar untuk membangun algoritma. Ketiga struktur tersebut adalah $
!.1.1. &untunan * 'e5uence
Algoritma dalah merupakan runtunan proses, yang berarti $
%. Tiap proses dikerjakan satu per satu.
'. Tiap proses dilaksanakan tepat satu kali, tidak ada proses yan diulang.
). 6rutan proses yang dilaksanakan dalam pemrosesan sama dengan urutan proses
sebagaimana yang tertulis di dalam algoritma.
+. Akhir dari proses terakhir merupakan akhir algoritma.
.ila runtunan proses dalam algoritma dilambangkan dengan A%, A', A), A+ dan A,, maka
urutan pelaksanaan proses&proses tersebut adalah seperti gambar di ba-ah ini $
!ontoh $
Algoritma membuat Kue .olu.
Z !atatan $ semua bahan sudah tersedia dan sudah sesuai dengan takarannya [
- Masukan Puti !elur
- "ocok #ampai mengem$ang
- Masukan gula pasir
-
"ocok #ampai merata
-
Masukan tepung
-
"ocok #ampai merata
Algoritma "enulisan (TM/K&M/\
Kamus 3okal $
.a#a $ (tring V'*W
Algoritma $
/nput ( .a#a )
=utput ( .a#a )
Halaman 15
A1 A2 A3 A4 A5
Algoritma Pemrograman
!.1.!. Pemilihan * 'election
Dalam beberapa kasus tertentu kita dihadapkan kepada persoalan yang mempunyai pilihan
atau dua ja-aban yang berbeda dan salah satunya harus dipilih atau bahkan mungkin
mempunyai pilihan lebih dari dua.
6ntuk hal yang demikian, maka pelaksanaan proses adalah seperti di ba-ah ini $
!.1.!.1. "otasi analisis satu masalah
Algoritma $
/( kondisi T,1"
Aksi
Endi
Aksi sesudah ten akan dilaksanakan jika kondisi bernilai benar. :ika kondisi bernilai salah
maka aksi tersebut tidak akan dikerjakan ( dile-at ).
!ontoh$
- Jika %mir men&adi &uara kelas
Maka akan di$elikan #epeda Mini
!ontoh $
Algoritma Penulisan 'T3/K63/\
Kamus Lokal 7
.a#a $ (tring V'*W
Agoritma 7
/nput ( .a#a )
/+ .a#a SQ $ (TM/K&M/G T,1"
.a#a ?$ (Tulisan Anda (alah )
1"D/+
=utput ( .a#a )
Halaman 16
?
Algoritma Pemrograman
!.1.!.!. "otasi analisis dua masalah
Algoritma $
/+ kondisi T,1"
Aksi%
1L'1
Aksi'
1"D/+
Aksi% sesudah then akan dilaksanakan jika kondisi bernilai benar, jika kondisi bernilai salah
maka aksi' yang akan dikerjakan.
!ontoh$
- Jika %mir men&adi &uara kelas
Maka akan di$elikan #epeda Mini
!elain itu tidak mendapat apa-apa
!ontoh $
Algoritma Penulisan 'T3/K63/8
Kamus Lokal 7
.a#a $ (tring V'*W
Algoritma 7
/nput ( .a#a )
/+ .a#a SQ $ (TM/K&M/G T,1"
.a#a $? (Tulisan Anda (alah )
1L'1
.a#a $? (Tulisan Anda .enar )
1"D/+
=utput ( .a#a )
!.1.%. Pengulangan * Looping
(elain dapat melakukan proses pemilihan aksi, komputer juga dapat melakukan aksi
pengulangan.
Aksi pengulangan ini dilakukan sebanyak proses yang diinginkan atau sampai kondisi
tertentu dipenuhi.
Halaman 17
Algoritma Pemrograman
(e#ara umum pengulangan terdiri atas dua bagian $
%. Kondisi, yaitu ekspresi boolean yang mengakibatkan pengulangan sampai suatu saat
berhenti.
'. Aksi yang diulang selama belum memenuhi kondisi berhenti.
Di dalam program terdapat beberapa notasi pengulangan yang berbeda, demikian juga
dengan notasi dalam algoritma. .eberapa notasi dapat digunakan untuk satu masalah yang
sama, namun ada notasi pengulangan tertentu yang hanya #o#ok dipakai untuk
permasalahan tertentu.
.eberapa ma#am perintah pengulangan $
!.1.%.1. "otasi +O& 9 Do
2otasi Algoritma $
5or <ariable harga awal To harga akhir
aksi
Endor
Aksi di dalam badan pengulangan akan
dilakukan sampai dengan harga akhir
dipenuhi.
Apabila satu aksi pertama telah dilakukan
maka se#ara otomatis <ariable yang tadinya
mempunyai harga a-al akan bertambah %.
!ontoh $
Algoritma Pengulangan:+or:do8
Kamus Lokal 7
2 $ /nteger
Algoritma 7
/nput ( 2 )
+O& : % TO 2 DO
=utput ( (TM/K&M/ )
1"D+O&
Algoritma ini akan men#etak tulisan D(TM/K&
M/E sebanyak 2 kali.
Halaman 18
Algoritma Pemrograman
!.1.%.!. "otasi &epeat 9 #ntil
2otasi Algoritma $
;epeat
aksi
6ntil kondisi
Aksi di dalam badan pengulangan akan dilakukan selama kondisi bernilai benar. Apabila
bernilai salah, maka pengulangan akan berhenti. 2amun demikian diperlukan suatu
perintah untuk mengubah kondisi sehingga memungkinkan untuk kondisi tidak dipenuhi.
Apabila tidak ada perintah untuk mengubah kondisi yang telah ada, maka proses
pengulangan tidak akan pernah berhenti.
!ontoh $
Algoritma Pengulangan:&epeat:#ntil
Kamus Lokal 7
: $ /nteger
Algoritma 7
: %
&1P1AT
=utput ( (TM/K&M/ )
: :@%
#"T/L (: Q '*)
Algoritma ini akan men#etak tulisan D(TM/K&M/E sebanyak '* kali.
!.1.%.%. "otasi ;hile 9 Do
2otasi Algoritma $
Chile kondisi do
aksi
End-hile
Aksi di dalam badan pengulangan akan dilakukan selama kondisi bernilai benar. Apabila
bernilai salah, maka pengulangan akan berhenti. 2amun demikian diperlukan suatu perintah
untuk mengubah kondisi sehingga memungkinkan untuk kondisi tidak dipenuhi.
Apabila tidak ada perintah untuk mengubah kondisi yang telah ada, maka proses
pengulangan tidak akan pernah berhenti.
Halaman 19
Algoritma Pemrograman
"erbedaannya dengan $e"eat-%ntil adalah ada kemungkinan aksi tidak dijalankan karena
kondisi bernilai salah. :ika pada $e"eat-%ntil minimal akan dilakukan aksi sebanyak % kali.
!ontoh $
Algoritma Pengulangan:;hile:Do
Kamus Lokal 7
:,2 $ /nteger
Algoritma 7
/nput( 2 )
: %
;,/L1 : 2 DO
=utput ( (TM/K&M/ )
: :@%
1"D;,/L1
(etelah melakukan proses /nput 2 maka algoritma ini akan men#etak tulisan D(TM/K&M/E
selama nilai : lebih ke#il atau sama dengan nilai 2.
!.!. +lowchart
Tujuan utama dari penggunaan flowhart adalah untuk menggambarkan suatu tahapan
penyelesaian masalah se#ara sederhana, terurai, rapih dan jelas dengan menggunakan
simbol&simbol yang standar. Tahap penyelesaian masalah yang disajikan harus jelas,
sederhana, eekti dan tepat. Dalam penulisan flowhart dikenal dua model, yaitu !istem
&lowhart dan Program &lowhart.
!.!.1. 'istem +lowchart
(istem lo-#hart merupakan diagram alir yang menggambarkan suatu sistem peralatan
komputer yang digunakan dalam proses pengolahan data serta hubungan antar peralatan
tersebut. (istem lo-#hart tidak digunakan untuk menggambarkan urutan langkah
meme#ahkan masalah, tetapi hanya untuk menggambarkan prosedur dalam sistem yang
dibentuk.
(imbol&simbol yang telah banyak digunakan pada penggambaran sistem lo-#hart adalah $
"ita Kartu "long B "un#hed
Magnetik Keyboard "aper Tape
Halaman 20
Algoritma Pemrograman
=n 3ine /nput B =utput Magneti# Drum
(torage B XD6
"ro#ess Magneti# Disk = 3ine (torage

"roses (ortir "roses Merge Arus
!ontoh penggunaan (istem 5lo-#hart $
!.!.!. Program +lowchart
"rogram lo-#hart merupakan diagram alir program yang menggambarkan urutan logika
dari suatu prosedur peme#ahan masalah .
Dalam menggambarkan program lo-#hart telah tersedia simbol&simbol standar.
.aik program lo-#hart ataupun sistem lo-#hart dapat menambahkan simbol&simbol yang
baru dengan syarat harus menambahkan simbol tersebut di dalam kamus simbol yang
digunakan beserta keterangannya.
(imbol&simbol yang standar digunakan dalam menggambarkan program lo-#hart adalah $
/nputB =utput /nisialisasi "emberian "roses
2ilai a-al
Halaman 21
Keyboard
CPU
Disket
Display
Algoritma Pemrograman
Keterangan Arus "engujian "ilihan
A-al B Akhir Konektor dalam Konektor untuk
"rogram satu halaman halaman berbeda
!ontoh penggunaan "rogram 5lo-#hart $
!.%. "assi 'chneiderman < "s Diagram =
(elain dengan menggunakan lo-#hart, penggambaran algoritma dapat juga dilakukan
dengan menggunakan lo-#hart 2assi (#hneiderman. "ada dasarnya lo-#hart ini adalah
lo-#hart yang terstruktur karena tanpa menggunakan tanda panah untuk proses
pengulangannya.
(imbol&simbol yang digunakan dalam lo-#hart 2assi (#heneiderman adalah \
(eYuen#e 3ooping
!ontrol !ontrol
Halaman 22
START
INPUT
Berapa Data;
N
Jl ! "
#or K ! $
To N
I%p&t Bil
Jl ! Jll ' Bil
Ne(t K
Pri%t ) J&la* ! ); Jl
ST+P
A
A
B
B
Statee%t ,
Statee%t $
Statee%t -
Statee%t .
/*ile ko%disi
+perasi
Algoritma Pemrograman
(ele#tion
!ontrol
!ontoh penggunaan lo-#hart 2assi (#hneiderman dalam menyelesaikan persoalan akar
persamaan k-adrat$
!.). Pseudocode
"seudo#ode adalah kode yang mirip dengan kode pemrogramman yang sebenarnya.
"seudo#ode berasal dari kata "seudo yang mempunyai arti mirip atau imitasi atau
menyerupai, dan #ode berarti program. "seudo#ode ditulis berdasarkan pada bahasa
pemrogramman .A(/!, "A(!A3, atau ! sehingga lebih tepat digunakan untuk
menggambarkan algoritma program yang akan dikomunikasikan kepada programmer yang
menngunakan program tsb.
Halaman 23
Case +0
State
$
State
,
State
-
T
Statee%t
$
Statee%t
,
1
I#
T
Statee%t
$
Ta%pa
Proses
1
I#
Start
Pri%t ) 2e%3ari akar persaaa% K4adrat )
Pri%t ) A56,'B5'C )
I%p&t ) Ko%sta%ta A ! );A
I%p&t ) Ko%sta%ta B ! );B
I%p&t ) Ko%sta%ta C ! );C
D ! B6,-.7A7C
1a Tidak
D ! "
Pri%t
) Akar Ia8i%er )
Pri%t )5$ ! 5,
Pri%t 9B:;,7A<
($ ! ; -B's=rD<<:,A
(, ! ; -B-s=rD<<:,A
Pri%t ) 5$ ! );5$
Pri%t ) 5, ! );5,
Stop
1a Tidak
D > "
Algoritma Pemrograman
Dalam penulisan pseudo#ode dikenal struktur penulisan algoritma seperti seYuen#e
stru#ture, sele#tion stru#ture dan looping stru#ture.
!ontoh algoritma untuk membuat Menu adalah seperti di ba-ah ini $
ME26 ";=T;AM
Membuat Arsip
(impan Arsip
8apus Arsip
Keluar dari Menu
Ketikan nomor "ilihan Menu $ U
Algorithm 2ame $ ME26
Kamus 3okal$
"il $ integer V%..+W Z nomor pilihan menu[
Algoritma
;epeat
=utput (D ME26 ";=T;AM E)
=utput (D %. Membuat Arsip E)
=utput (D '. (impan ArsipE)
=utput (D ). 8apus ArsipE)
=utput (D +. Keluar dari MenuE)
=utput (D Ketikan 2omor pilihan Menu $E)
/nput (pil)
Depend on pil
"il?% $ output (D Anda Memilih menu Membuat Arsip D)
"il?' $ output (D Anda Memilih menu (impan Arsip D)
"il?) $ output (D Anda Memilih menu 8apus Arsip D)
"il?+ $ output (D Anda Memilih menu Keluar dari menuD)
Enddepend
6ntil pil?+
!ontoh $
Algoritma untuk menentukan bilangan tersebsar dari >, y, I.
/+ > Q y then
/+ > Q I then
Tulis > sebagai bilangan terbesar
1lse
Tulis I sebagai bilangan terbesar
1ndi(
Halaman 24
Algoritma Pemrograman
1lse
/+ y Q I then
Tulis y sebagai bilangan terbesar
1lse
Tulis I sebagai bilangan terbesar
1ndi(
1ndi(
Karena bahasan selanjutnya akan menggunakan model prosedural, maka bagian data dan
bagian intruksi dipisahkan tempatnya. "ada dasarnya algoritma terbagi dalam ) bagian
yaitu $
Bagian Kepala (8ead ), Bagian Deklarasi dan Bagian Deskripsi algoritma. (etiap bagain
disertai dengan komentar untuk memperjelas maksud teks yang dituliskan. Komentar
adalah teks yang diapit oleh pasangantanda kurung kura-al Z [, ( ).
!.).1. Bagian Kepala Algoritma < ,ead =
.agian kepala dalah bagian yang berisi nama algoritma dan penjelasan ( spesiikasi )
tentang algoritma tersebut.
!ontoh $
!.).!. Bagian Deklarasi
.agian ini mendeklarasikan semua nama yang digunakan dalam algoritma. 2ama tersebut
dapat merupakan nama Konstanta, nama <ariable, nama tipe, nama prosedur atau nama
ungsi.
!.).!. Bagian Dekripsi
.agian ini adalah bagian yang berisi uraian langkah&langkah.penyelesaian masalah.
Halaman 25
Algoritma LUAS_LINGKARAN
; 2e%8*it&%8 l&as li%8kara% &%t&k &k&ra% ?ari-?ari terte%t&@ Al8orita e%eria as&ka% ?ari-?ariA e%8*it&%8
l&as%yaA lal& e%3etak l&as li%8kara% ke pira%ti kel&ara%<
DKLARASI
B %aa tetapa% C
3o%ts Npe8 ! $"" ; ?&la* pe8a4ai <
3o%ts p*i ! -A$. ; %ilai p*i <
B %aa DariableC
3 E 3*ara3ter
= E bolea%
0&%3tio% APAKAFGA; i%p&t 3 E 3a*ar < boolea%
; e%e8balika% %ilai Tr&e bila 3 adala* karakter AA ata& 0alse ?ika sebalika%ya <
Algoritma Pemrograman
!ontoh
!ontoh Algoritma lengkap $
Tugas 7
%. .uatlah Algoritma dengan menggunakan 5lo-#hart, 2s Diagram dan "seudo#ode untuk
menentukan banyaknya bilangan ganjil dan bilangan genap yang lebih ke#il dari n ( nilai
yang diinputkan ).
Halaman 26
DSKRIPSI
Read ;3Ad<
I0 3 > d t*e%
e a ' b
else
e a - b
e%di0
4rite;e<
Algoritma !AKSI!U!
; 2e%e%t&ka% bila%8a% terbesar dari - b&a* bila%8a% b&lat <
DKLARASI
AA BA C E i%te8er
DSKRIPSI
Read ; AA BA C <
I" A H B then
I" A H C then
/rite ; Bila%8a% terbesar adala* A A<
l#e
/rite ; Bila%8a% terbesar adala* A C<
ndi$
l#e
I" B H C then
/rite ; Bila%8a% terbesar adala* A B<
l#e
/rite ; Bila%8a% terbesar adala* A C<
ndi$
ndi$
Algoritma Pemrograman
Halaman 27
BAB III
Algoritma Pemrograman
A&&A4 * LA&/K
Tes Kemampuan Awal
%. Apa yang anda ketahui array satu dimensi dan array dua dimensi 4
'. .uatlah algoritma untuk mengisi dan menampilkan sebuah array serta menghitung
jumlah dari seluruh isi elemen yang diinputkan.
). .uatlah algoritma untuk mengisi dan menampilkan sebuah array serta menampilkan
elemen yang ganjil saja atau yang genap saja beserta jumlahnya menurut
pembagiannya.
+. .uatlah Algoritma untuk menghitung jumlah bilangan yang terletak pada garis diagonal
sebuah matrik
,. .uatlah Algoritma untuk menjumlahkan dua buah matrik dengan menggunakan array
dua dimensi K
7. .uatlah Algoritma untuk mengkailkan dua buah matrik dengan menggunakan array dua
dimensi K
Halaman 28
Algoritma Pemrograman
%.1. Arra$ * Larik 'atu Dimensi
%.1.1. De(inisi Arra$ * Larik 'atu Dimensi
ArrayB3arik adalah struktur data yang menga#u pada sebuah atau sekumpulan elemen
melalui indeks. Elemen ArrayB3arik dapat diakses langsung melalui indeksnya. /ndek Array B
3arik harus bertipe data yang menyatakan keterurutan, misalnya integer atau karakter.
ArrayB3arik yang bernama A dengan delapan buah elemen dapat dibayangkan se#ara logika
sebagai kumpulan kotak yang berturutan
A
% ' ) + , 7 9 1
Tiap kotak pada ArrayB3arik tersebut diberi indeks integer %,',),H,1. Tiap elemen ArrayB3arik
ditulis dengan notasi $
AV%W AV'W AV)W AV+W AV,W AV7W AV9W AV1W
Angka di dalam kurung siku menunjukan indeks dari ArrayB3arik.
Karena tiap elemen ArrayB3arik menyatakan tempat di memori, maka sebagaimana siat
memori adalah tempat penyimpan sementara, maka isi ArrayB3arik akan hilang jika
komputer dimatikan.
).1.!. Pende(inisian Arra$ * Larik 'atu Dimensi dalam inisialisasi
ArrayB3arik adalah struktur data yang statis, artinya jumlah elemen ArrayB3arik harus sudah
diketahui sebelumnya. :umlah elemen ArrayB3arik tidak dapat dirubah, ditambah atau
dikurangi selama pelaksanaan program.
Mendeinisikan ArrayB3arik di dalam deinisi <ariable berrati $
& Mendeinisikan banyaknya elemen ArrayB3arik
& Mendeinisikan tipe elemen ArrayB3arik
Mendeinisikan banyaknya elemen ArrayB3arik berarti memesa sejumlah tempat di meori,
dan memori akan mengalokasikan tempat sebanyak elemen larik yang bersangkutan.
!ontoh pendeinisian ArrayB3arik di dalam deinisi <ariable $
Xar
mahasis-a $ arrayV%..%**W o integer
/ni berarti bah-a nama <ariable array mahasis-a bertipe integer dan mempunyai elemen
maksimum sebanyak %** elemen.
(eperti halnya <ariable tunggal, tiap elemen ArrayB3arik dapat diisi melalui penugasan atau
pemba#aan dari input de<i#e.
Halaman 29
Algoritma Pemrograman
%.1.%. 3enginisialisasi Arra$ * Larik 'atu Dimensi
Menginisialisasi ArrayB3arik adalah memberi harga a-al sebuah elemen ArrayB3arik.
/nisialisasi kadang&kadang diperlukan, misalnya mengosongkan elemen ArrayB3arik sebelum
dipakai untuk proses tertentu.
Mengosongkan ArrayB3arik bertipe numerik artinya mengisi elemen ArrayB3arik dengan nilai
*, jika bertipa karakter maka artinga mengisi elemen ArrayB3arik dengan spasi.
!ontoh pemrosesan penginisialisasian elemen ArrayB3arik $
Penginisialisasian:elemen: Arra$:Larik
Kamus Lokal 7
A $ arrayV%..%**W o integer
/, 2 $ integer
Algoritma 7
/nput (2)
5or / ? % to 2 do
AV/W *
Endor
%.1. ). Pemrosesan Arra$ * Larik 'atu Dimensi
Elemen ArrayB3arik tersusun se#ara beruntun. =leh karena itu, elemennya diproses se#ara
beruntun melalui indeks yang terurut, asalkan indeks tersebut sudah terdeinisi.
"emrosesan dilakukan mulai pada elemen pertama ArrayB3arik se#ara berurutan sampai
elemen terakhir.
!ontoh pemrosesan pengisian elemen ArrayB3arik $
Pengisian:#mum:elemen: Arra$:Larik
Kamus Lokal 7
A $ arrayV%..%**W o integer
/, 2 $ integer
Halaman 30
Algoritma Pemrograman
Algoritma 7
/nput (2)
5or / ? % to 2 do
( AV/W)? ( AV/W)@,
Endor
"roses adalah aksi yang dilakukan terhadap elemen ArrayB3arik. "roses dapat berupa
penugasan, pemba#aan, penulisan atau manipulasi lainnya.
%.1.>. /nput 1lemen Arra$ * Larik 'atu Dimensi dari /nput De0ice
(elain dengan penugasan, elemen ArrayB3arik dapat diisi nilainya dari input de<i#e dengan
menggunakan perintah /"P#T.
!ontoh pengisian nilai ArrayB3arik dengan menggunakan perintah input.
Pengisian:elemen: Arra$:Larik
Kamus Lokal 7
A $ arrayV%..%**W o integer
/, 2 $ integer
Algoritma 7
/nput (2)
5or / ? % to 2 do
/nput( AV/W)
Endor
(eringkali tidak seluruh elemen ArrayB3arik yang dideinisikan digunakan dalam
pemrosesan. .ila ArrayB3arik A dideinisikan %** elemen, mungkin tidak seratus elemen
yang dipakai. .anyaknya elemen ArrayB3arik yang dipakai disebut &umla elemen efektif.
:umlah elemen eekti disimpan didalam <ariable tertentu, misalnya Nef. Kalau demikian,
algoritma pengisian elemen ArrayB3arik diubah menjadi sebagai prosedur di ba-ah ini $
Procedure /'/:A&&A4<output A larik8 Output Nef 7 integer =
Kamus Lokal 7
A $ arrayV%..%**W o integer
/ $ integer
Algoritma 7
/nput (2e)
5or / ? % to 2e do
/nput( AV i W)
Endor
Halaman 31
Algoritma Pemrograman
Algoritma 6tama $
Z3engisi:Arra$[
/(/UA;;AP(A,2e)
%.1.?. Output 1lemen Arra$ * Larik 'atu Dimensi ke Output De0ice
/si elemen arrayBlarik dapat di#etak ke output de<i#e dengan perintah Output.
!ontoh algoritma pen#etakan $
Pencetakan:elemen: Arra$:Larik
Kamus Lokal 7
A $ arrayV%..%**W o integer
/, 2 $ integer
Algoritma 7
5or / ? % to 2 do
=utput( AV i W)
Endor
%.1.@. 3encari ,arga Tertentu di dalam Arra$ * Larik 'atu Dimensi
"en#arian beruntun adalah proses mengunjungi elemen arrayBlarik dari elemen pertama,
kemudian membandingkan dengan nilai yang di#ari. :ika sama, maka pen#arian sukses.
:ika belum sama, maka akan melanjutkan pada elemen selanjutnya. "roses selanjutnya
dilakukan sampai elemen yang di#ari ditemukan atau sampai elemen arrayBlarik habis.
Misalkan array A V%..1W telah berisi harga bilangan bulat $
A
% ' ) + , 7 9 1
,7 +, %' )+ %% '+ 01 %%
Misalkan yang di#ari adalah $ ] ? %%
"emeriksaan akan dilakukan terhadap ,7, +,, %', )+, %%.
] ditemukan pada elemen ke ,, jadi nilai ] a V,W.
Halaman 32
Algoritma Pemrograman
Di dalam array A terdapat dua elemen %%, namun demikian yang diperhitungkan hanya
elemen yang terdahulu ditemukan ( dalam hal ini elemen yang ke , ).
Algoritma pen#arian harga tertentu $
Procedure -A&/:A&&A4</nputA 7 Arra$8 /nput "e( 7 integer8 /nput 7 inetger8 Output
:idA 7 integer =
Kamus Lokal 7
/ $ /nteger
Algoritma 7
/ %
Chile ( / S 2e ) and ( AV/W ]) do
/ $? / @ %
End-hile ( / $? 2e ) or ( AV/W ? ] )
/ AV / W ? ] then Z ] ditemukan [
/d> / Z id> ? / jika ditemukan[
Else
/d> 0000 Z id> ? 0000 jika tidak ditemukan[
Endi
%.1.B. 3encari ,arga 3aksimum di dalam Arra$ * Larik 'atu
Dimensi
"roses pen#ariannya sama dengan proses pen#arian umum, pada saat mengunjungi
elemen yang pertama, elemen tersebut disimpan dalam nama <ariable tunggal. Kemudian
<ariable tunggal tersebut dibandingkan dengan isi dari elemen arrayBlarik selanjutnya.
Apabila elemen arrayBlarik yang dikunjungi lebih besar dari nilai <ariable tunggal, maka nilai
elemen arrayBlarik tersebut mengganti isi <ariable tunggal. Demikian untuk elemen
selanjutnya. :ika elemen yang dikunjungi lebih ke#il, maka akan dilakukan proses
kunjungan ke elemen arrayBlarik selanjutnya.
.ila elemen sudah terurut naik, maka pen#arian sudah selesai pada elemen terakhir,
sedang untuk elemen yang menurun, maka pen#arian sudah selesai pada elemen yang
pertama.
.ila elemen array tersusun a#ak, maka proses kunjungan akan dilakukan ke seluruh
elemen.
Procedure 3AK':A&&A4 < input A 7 arra$8 input "e( 7 integer 8
Output maks7 integer 8 Output /maks 7 integer =
Kamus Lokal 7
/ $ /nteger
Halaman 33
Algoritma Pemrograman
Algoritma 7
Maks &0000
5or / % to 2e do
/ AV/W Q maks then
Maks A V/W
/maks i
Endi
Endor
Algoritma ini harga maksimum a-alnya diinisialisasikan dengan nilai F 0000. Algoritma ini
hanya akan benar apabila elemen array bernilai positi. Apabila bernilai negati, hanya akan
benar selama elemen array lebih besar dari F0000. Apabila ketentuan tersebut tidak
dipenuhi, maka algoritma akan salah. Alternati algoritma agar dapat digunakan dengan
tanpa pembatasan adalah seperti di ba-ah ini $
Procedure 3AK':A&&A4 < input A 7 arra$8 input "e( 7 integer 8
Output maks7 integer 8 Output /maks 7 integer =
Kamus Lokal 7
/ $ /nteger
Algoritma 7
Maks AV/W
5or / ' to 2e do
/ AV/W Q maks then
Maks A V/W
/maks i
Endi
Endor
%.1.C. 3encari ,arga 3inimum di dalam Arra$ * Larik 'atu Dimensi
"roses pen#ariannya sama dengan proses pen#arian umum, pada saat mengunjungi
elemen yang pertama, elemen tersebut disimpan dalam nama <ariable tunggal. Kemudian
<ariable tunggal tersebut dibandingkan dengan isi dari elemen arrayBlarik selanjutnya.
Apabila elemen arrayBlarik yang dikunjungi lebih ke#il dari nilai <ariable tunggal, maka nilai
elemen arrayBlarik tersebut mengganti isi <ariable tunggal. Demikian untuk elemen
selanjutnya. :ika elemen yang dikunjungi lebih besar, maka akan dilakukan proses
kunjungan ke elemen arrayBlarik selanjutnya.
.ila elemen sudah terurut naik, maka pen#arian sudah selesai pada elemen pertama,
sedang untuk elemen yang menurun, maka pen#arian sudah selesai pada elemen yang
terakhir.
Halaman 34
Algoritma Pemrograman
.ila elemen array tersusun a#ak, maka proses kunjungan akan dilakukan ke seluruh
elemen.
Procedure 3/":A&&A4 < input A 7 arra$8 input "e( 7 integer 8
Output min 7 integer 8 Output /min 7 integer =
Kamus Lokal 7
/ $ /nteger
Algoritma 7
Min 0000
5or / % to 2e do
/ AV/W S maks then
Min A V/W
/min i
Endi
Endor
Algoritma ini harga maksimum a-alnya diinisialisasikan dengan nilai 0000. Algoritma ini
hanya akan benar apabila elemen array bernilai negati. Apabila bernilai positi, hanya akan
benar selama elemen array lebih ke#ildari 0000. Apabila ketentuan tersebut tidak dipenuhi,
maka algoritma akan salah. Alternati algoritma agar dapat digunakan dengan tanpa
pembatasan adalah seperti di ba-ah ini $
"ro#edure M/2UA;;AP ( input A $ array\ input 2e $ integer \
=utput min $ integer \ =utput /min $ integer )
Kamus 3okal $
/ $ /nteger
Algoritma $
Min AV/W
5or / ' to 2e do
/ AV/W S min then
Min A V/W
/min i
Endi
Endor
%.!. Arra$ * Larik Dua Dimensi
%.!.1. De(inisi Arra$ * Larik Dua Dimensi
ArrayB3arik Dua dimensi adalah struktur data yang sama dengan array satu dimensi, yaitu
menga#u pada sebuah atau sekumpulan elemen melalui indeks. Elemen ArrayB3arik dapat
diakses langsung melalui indeksnya. /ndek Array B 3arik harus bertipe data yang
menyatakan keterurutan, misalnya integer atau karakter.
Halaman 35
Algoritma Pemrograman
ArrayB3arik Dua dimensi yang bernama A dengan delapan buah elemen dapat dibayangkan
se#ara logika sebagai kumpulan kotak yang berturutan
A
>,y >,y@% >,y@' >,y@) >,y@+ >,y@,
]@%,y ]@%,y@% ]@%,y@' ]@%,y@) ]@%,y@+ ]@%,y@,
]@',y ]@%,y@' ]@',y@' ]@',y@) ]@',y@+ ]@',y@,
]@),y ]@%,y@) ]@),y@' ]@',y@) ]@),y@+ ]@),y@,
]@+,y ]@%,y@+ ]@+,y@' ]@',y@) ]@+,y@+ ]@+,y@,
]@,,y ]@%,y@, ]@,,y@' ]@',y@) ]@,,y@+ ]@,,y@,
Tiap kotak pada ArrayB3arik dua dimensi tersebut diberi indeks integer V%H,,%H,W Tiap
elemen ArrayB3arik dua dimensi ditulis dengan notasi $
AV%,%W AV%,'W AV%,)W AV%,+W AV%,,W
AV',%W AV','W AV',)W AV',+W AV',,W
AV),%W AV),'W AV),)W AV),+W AV),,W
AV+,%W AV+,'W AV+,)W AV+,+W AV+,,W
AV,,%W AV,,'W AV,,)W AV,,+W AV,,,W
Angka di dalam kurung siku menunjukan indeks dari ArrayB3arik dua dimensi.
%.!.!. Pende(inisian Arra$ * Larik Dua Dimensi dalam inisialisasi
ArrayB3arik dua dimensi adalah struktur data yang statis, artinya jumlah elemen ArrayB3arik
dua dimensi harus sudah diketahui sebelumnya. :umlah elemen ArrayB3arik dua dimensi
tidak dapat dirubah, ditambah atau dikurangi selama pelaksanaan program.
Mendeinisikan ArrayB3arik dua dimensi di dalam deinisi <ariable berrati $
& Mendeinisikan banyaknya elemen ArrayB3arik dua dimensi
& Mendeinisikan tipe elemen ArrayB3arik dua dimensi
Mendeinisikan banyaknya elemen ArrayB3arik dua dimensi berarti memesan sejumlah
tempat di meori, dan memori akan mengalokasikan tempat sebanyak elemen larik dua
dimensi yang bersangkutan.
!ontoh pendeinisian ArrayB3arik dua dimensi di dalam deinisi <ariable $
Xar
mahasis-a $ arrayV%..%**, %..%,W o integer
/ni berarti bah-a nama <ariable array mahasis-a bertipe integer dan mempunyai elemen
maksimum sebanyak %** elemen dan masing elemen tersebut mempunyai kapasitas
maksimum data yang dpat disimpan sebanyak , buah.
(eperti halnya <ariable tunggal, tiap elemen ArrayB3arik dapat diisi melalui penugasan atau
pemba#aan dari input de<i#e.
%.!.%. 3enginisialisasi Arra$ * Larik Dua Dimensi
Halaman 36
Algoritma Pemrograman
Menginisialisasi ArrayB3arik dua dimensi adalah memberi harga a-al sebuah elemen
ArrayB3arik dua dimensi. /nisialisasi kadang&kadang diperlukan, misalnya mengosongkan
elemen ArrayB3arik dua dimensi sebelum dipakai untuk proses tertentu.
Mengosongkan ArrayB3arik dua dimensi bertipe numerik artinya mengisi elemen ArrayB3arik
dua dimensi dengan nilai *, jika bertipa karakter maka artinga mengisi elemen ArrayB3arik
dua dimensi dengan spasi.
!ontoh pemrosesan penginisialisasian elemen ArrayB3arik $
Penginisialisasian:elemen: Arra$:Larik
Kamus 3okal $
A $ arrayV%..%**, %..%,W o integer
/, :,],P $ in teger
Algoritma $
/nput ( ] )
/nput ( P )
5or / ? % to ] do
5or : ? % to P do
AV/,:W *
Endor
Endor
%.!.). Pemrosesan Arra$ * Larik Dua Dimensi
Elemen ArrayB3arik tersusun se#ara beruntun. =leh karena itu, elemennya diproses se#ara
beruntun melalui indeks yang terurut, asalkan indeks tersebut sudah terdeinisi.
"emrosesan dilakukan mulai pada elemen pertama ArrayB3arik se#ara berurutan sampai
elemen terakhir.
!ontoh pemrosesan pengisian elemen ArrayB3arik $
Pengisian:#mum:elemen: Arra$:Larik
Kamus 3okal $
Halaman 37
Algoritma Pemrograman
A $ arrayV%..%**,%..,W o integer
/, :,],P $ integer
Algoritma $
/nput ( ] )
/nput ( P )
5or / ? % to ] do
5or : ? % to P do
AV/,:W AV/,:W @ ,
Endor
Endor
"roses adalah aksi yang dilakukan terhadap elemen ArrayB3arik. "roses dapat berupa
penugasan, pemba#aan, penulisan atau manipulasi lainnya.
%.!.>. /nput 1lemen Arra$ * Larik Dua Dimensi dari /nput De0ice
(elain dengan penugasan, elemen ArrayB3arik dapat diisi nilainya dari input de<i#e dengan
menggunakan perintah /"P#T.
!ontoh pengisian nilai ArrayB3arik dengan menggunakan perintah input.
Pengisian:elemen: Arra$:Larik
Kamus 3okal $
A $ arrayV%..%**,%..,W o integer
/, :,],P $ integer
Algoritma $
/nput ( ] )
/nput ( P )
5or / ? % to ] do
5or : ? % to P do
/nput AV/,:W
Endor
Endor
(eringkali tidak seluruh elemen ArrayB3arik yang dideinisikan digunakan dalam
pemrosesan. .ila ArrayB3arik A dideinisikan %** elemen, mungkin tidak seratus elemen
yang dipakai. .anyaknya elemen ArrayB3arik yang dipakai disebut &umla elemen efektif.
:umlah elemen eekti disimpan didalam <ariable tertentu, misalnya Nef. Kalau demikian,
algoritma pengisian elemen ArrayB3arik diubah menjadi sebagai prosedur di ba-ah ini $
Procedure /'/:A&&A4<output A larik8 Output Nef 7 integer =
Kamus 3okal $
Halaman 38
Algoritma Pemrograman
A $ arrayV%..%**,%..,W o integer
/,:,],P $ integer
Algoritma $
/nput ( ] )
/nput ( P )
5or / ? % to ] do
5or : ? % to P do
/nput AV/,:W
Endor
Endor
Algoritma 6tama $
Z3engisi:Arra$[
/(/UA;;AP(A,],P)
%.!.?. Output 1lemen Arra$ * Larik Dua Dimensi ke Output De0ice
/si elemen arrayBlarik dapat di#etak ke output de<i#e dengan perintah Output.
!ontoh algoritma pen#etakan $
Pencetakan:elemen: Arra$:Larik
Kamus 3okal $
A $ arrayV%..%**,%..,W o integer
/, :,],P $ integer
Algoritma $
/nput ( ] )
/nput ( P )
5or / ? % to ] do
5or : ? % to P do
Output AV/,:W
Endor
Endor
Tugas 7
%. .uatlah algoritma untuk menjumlahkan dua buah Matrik
'. .uatlah algoritma untuk mengalikan dua buah Matrik
Halaman 39
BAB IV
Algoritma Pemrograman
+#"2'/ DA" P&O'1D#&
Tes Kemampuan Awal
%. .uatlah algoritma dengan program DE3"8/ untuk men#ari banyaknya bilangan ganjil
dan bilangan genap yang lebih ke#il dari 2 ( bilangan yang diinputkan ) dengan
menggunakan alat pseudo#ode serta menggunakan ungsi atau prosedur.
'. .uatlah algoritma dengan program DE3"8/ untuk men#ari jumlah data sebanyak 2
( bilangan yang diinputkan ) dengan nilai data yang bebas, dengan menggunakan alat
pseudo#ode serta menggunakan ungsi atau prosedur.
). .uatlah algoritma dengan program aplikasi DEK"8/ untuk men#ari banyaknya bilangan
ganjil dan genap dari sejumlah data bilangan yang diinputkan dengan nilai data yang
bebas, gunakan alat pseudo#ode serta ungsi atau prosedur.
Halaman 40
Algoritma Pemrograman
).1. +ungsi
5ungsi adalah modul program yang mengembalikan ( return ) sebuah nilai. Dalam
matematika, anda sudah mengenal ungsi seperti ini $
(>) ? >
'
@)> F ,
g (t) ? 't F )
h (>,y,I ) ? '>y' @ )yI @ %*y
"ada #ontoh di atas, ,g dan h adalah ungsi, sedangkan >, t, >, y dan I adalah parameter
ungsi yang bersangkutan. Dengan memberikan parameter, maka nilai ungsinya dapat
dihitung.
).1.1. Deklarasi +ungsi
Dalam algoritma yang aplikasi programnya menggunakan "A(!A3, notasi untuk
pendeklarasian ungsi adalah seperti di ba-ah ini $
5un#tion name 2AMA562T(/ ( parameter masukan )
Kamus 3okal $
Algoritma $
A-al
E
Akhir
;eturn hasil
"arameter yang dideinisikan pada bagian judul ungsi dinamakan parameter (ormal.
"arameter ormal boleh tidak ada. :ika ada, parameter ormal harus berupa nama <ariable.
(emua nama yang dideinisikan dalam bagian <ariable, berlaku lokal ( hanya di dalam
daerah ungsi ).
!ontoh ungsi $
6ntuk mendapatkan nilai 5(>) ? >
'
@ )> F ,, > ;
5un#tion Men#ariU5(P$real ) real
Kamus 3okal $
> $ real
Algoritma $
P > A > @ ) A > F ,
;eturn y
Halaman 41
Algoritma Pemrograman
).1.!. Pemanggilan +ungsi
5ungsi dipanggil dengan menyebutkan nama beserta parameternya ( jika ada ).
2AMA562T(/ ( parameter )
2ama parameter yang disertakan pada -aktu pemanggilan disebut parameter aktual.
"arameter aktual dapat berupa konstanta, nama konstanta atau nama <ariable dengan
syarat kesemuanya harus sudah dideinisikan terlebih dahulu tipe dan nilainya .
8al&hal yang perlu diperhatikan dalam
pemanggilan ungsi adalah $
%. :umlah parameter aktual harus sama dengan
jumlah parameter ormal.
'. Tipe parameter aktual harus sama dengan tipe
parameter ormal.
). 6rutan parameter aktual harus sama dengan
urutan parameter ormal.
+. 2ama&nama parameter aktual boleh tidak
sama denganparameter ormal.
!ontoh pemanggilan ungsi 5 $
Output (Men#ariU5(>))
).!. Prosedur
"rosedur adalah modul program yang berisi rangkaian proses dan menghasilkan eek yang
terdeinisi. Karena ada eek yang timbul inilah maka pada setiap prosedur harus
dideinisikan keadaan a-al ( K.a-al) sebelum rangkaian proses di dalam prosedur
dilaksanakan dan keadaan akhir ( K.akhir) setelah rangkaian proses dilaksanakan.
(eperti pada ungsi, prosedur diberi nama yang unik, disertai datar parameter ormal jika
ada.
"arameter ormal dalam prosedur dibedakan atas tiga jenis $
%. "arameter /nput
'. "arameter =utput
). "arameter /nputB=utput
Halaman 42
Algoritma Pemrograman
).!.1. Deklarasi Prosedur
2otasi untuk pendeklarasian prosedur $
"ro#edure 2AMA";=(ED6;
(/nputB=utput parameter ormal )
Kamus 3okal $
Algoritma $
A-al
$
Akhir
).!.!. Pemanggilan Prosedur
"rosedur dipanggil dengan menyebutkan nama beserta parameter aktualnya nya (jika ada).
2AMA";=(ED6;( parameter aktual )
"ada -aktu pemanggilan, terjadi relasi satu&satu antara parameter aktual dengan parameter
ormal. 8arga atau nama parameter aktual diterimaG oleh paramater ormal. "arameter
berjenis input dapat berupa konstanta atau <ariable. ( harganya sudah terdeinisi ), sehingga
pemanggilan dengan parameter berjenis input disebut juga pemanggilan dengan
menggunakan nilai ( #all by <alue ). "arameter berjenis output atau inputBoutput harus
beupa <ariable. "ada -aktu pemanggilan yang dikirim ke parameter aktual bukan harga
parameter aktual tetapi nama ( a#uan atau reerensi ) parameternya ( termasuk harga yang
dikandung), sehinga pemanggilan dengan parameter output atau inputBoutput disebut juga
pemanggilan dengan a#uan ( #all by reeren#e ). "arameter berjenis input jika harganya
dirubah dalam badan prosedur, harganya tidak berubah setelah pemanggilan, untuk
parameter berjenis inputBoutput harganya berubah setelah pemanggilan. 2ama parameter
aktual tidak boleh sama dengan parameter ormal. Aturan yang berlaku di dalam ungsi
berlaku juga dalam prosedur.
!ontoh "rosedur $
Halaman 43
Pro3ed&re FITUNIGRATAGRATA;i%p&t N E i%te8er; o&tp&t & E real <
B K@a4al E *ar8a N terde0i%isi K@ak*ir E & adala* rata-rata dari N b&a* bila%8a% C
DeklarasiE
IAbilAtoral E i%te8er
Deskripsi E
Total " ; i%isialisasi <
I $ ; i%isialisasi pe%3a3a* <
/*ile I N do
I%p&t ; bil <
Total total ' bil
i i ' $
e%d4*ile
;K H N <
& total : N
Al8orita RATAGRATAGBIJANIANGBUJAT
; Pro8ra &taa &%t&k e%8*it&%8 rata-rata N b&a* bila%8a% b&lat <
DKKJARASI
N E i%te8er ; Ba%yak%ya data bila%8a% b&latA N positi0 <
U E real ; %ilai-rata-rata sel&r&* bila%8a% <
DKSKRIPSI
Read N
/rite ;2e%8*it&%8 rata-rata N b&a* bila%8a% b&lat<
FITUNIGRATAGRATA
/rite ;Nilai rata-rata ! A &<
Algoritma Pemrograman
"ada prosedur dan program utama di atas, <ariable 2 dan u dideklarasikan di dalam bagian
DEK3A;A(/ program utama, karena itu 2 dan u bersiat global sehingga juga dikenal dan
dapat digunakan dalam prosedur 8/T62TU;ATAU;ATA. (edangkan <ariable /, bil dan total
dideklarasikan di dalam bagian DEK3A;A(/ prosedur 8/T62TU;ATAU;ATA., karena itu /,
bil dan total bersiat lokal dan hanya dikenal dalam prosedur 8/T62TU;ATAU;ATA.
).%. "ama 2lobal dan "ama Lokal
2ama&nama ( kostanta, <ariable, tipe, dll ) yang dideklarasikan dalam bagian DEK3A;A(/
sebuah prosedur hanya dikenal dalam badan prosedur yang bersangkutan. 8al ini biasanya
dikatakan sebagai 0ariable lokal. 6ntuk nama&nama yang dideklarasikan pada bagian
Deklarasi program utama dapat dikenal di seluruh bagian program. .iasanya dinamakan
sebagai 0ariable global.
).). 3enggunakan +ungsi atau Prosedur
Tidak ada aturan baku yang menyatakan apakah sebuah modul direalisasikan sebagai
ungsi atau prosedur. (uatu ungsi dapat ditulis sebagai prosedur, namun hanya prosedur
yang menghasilkan satu keluaran saja yang dapat dijadikan ungsi. .ila ungsi dinyatakan
sebagai prosedur, maka perubahan yang dilakkan adalah pada tipe hasil. 8asil yang
dikembalikan oleh ungsi dinyatakan sebagai parameter ormal berjenis output.
Halaman 44
BAB V
Algoritma Pemrograman
'O&T/"2
Tes Kemampuan Awal
%. (ebutkan :enis (orting yang anda ketahui, terangkan bagaimana proses
pengurutannya dengan memberikan sebuah #ontoh K
'. 2ilai apa yang di#ari untuk mendapatkan sebuah metode pengurutan yang paling
baik 4
Halaman 45
Algoritma Pemrograman
>.1. 'orting < Pengurutan =
#orting ( pengurutan ) se#ara umum diartikan sebagai proses penyusunan kembali
sekumpulan objek ke dalam suatu urutan B sekuaens tertentu berdasarkan kriteria
pengurutan tertentu. Tujuan sorting adalah untuk memudahkan silakukannya proses searc
( pen#arian ) terhadap objek yang terdapat dalam kumpulan yang telah terurut tersebut.
(ebagai #ontoh, perhatikan proses men#ari nomor telepon dalam sebuah buku telepon.
"roses searc ini menjadi sangat mudah karena nama& nama dalam buku telepon sudah
terurut.
:ika kita memiliki ietem&item data $ a%,a' , a), H ,an, maka proses sorting mengubah urutan B
mempertukarkan posisi itemBitem tersebut sehingga diperoleh ak%,ak' , ak), H ,akn,
sedemikian rupa sehingga, jika terdapat sebuah ordering function , maka (ak%) S (ak' S (ak))
, H (akn). 6mumnya, ungsi ini berbentuk rumus komputasi, namun disimpan dalam bentuk
komponen B ield dari masing&masing item. 2lainya disebut key dari item tersebut.
(ebuah ile berukuran n ialah kumpulan n buah itemn r(%), r('), r()), H , r(n). (etiap item ile
disebut re#ord. "ada setiap re#ord r ( i ) terdapat sebuah key k ( i ). Key ini biasanya adalah
sebuah subile dari keseluruhan re#ord, baik dengan urutan menaik ( as#ending) maupun
menurun ( des#ending ). (ebuah metode sort dikatakan stabil (stable) apabila untuk semua
re#ord i dan j dimana k( i ) ? k ( j ), jika r ( i ) mendahului r ( j ) pada ile a-al, maka r ( i )
juga mendahului r ( j ) pada ile yang terurut. Dengan kata lain, urutan relati dari item&item
yang nilai key&nya sama tidak akan berubah di akhir proses pengurutan.
"roses sorting dapat dilakukan langsung terhadap re#ord&re#ord yang ada atau terhadap
sebuah tabel bantu yang berisi pointer&pointer ( disebut sorting $y address). (ebagai
#ontoh, pada gambar diba-ah ditunjukan ditunjukan sebuah ile dengan , re#ord. :ika ile
tersebut diurutkan se#ara menaik ( increasing order ) terhadap key numeric&nya, maka
hasilnya terlihat pada tabel sebelahnya. Dalam kasus ini re#ord&re#ordnya sendiri telah
diurutkan se#ara aktual.
Key 5ield lain Key 5ield lain
;e#ord % + DDD % AAA
;e#ord ' ' ... ' ...
;e#ord ) % AAA ) !!!
;e#ord + , !!! + DDD
;e#ord , ) EEE , EEE
5ile 5ile
2amun apabila jumlah data B ield yang tersimpan dalam masing&masing re#ord pada file
tersebut #ukup besar, maka o'eread -aktu yang dibutuhkan untuk memindahkan data
se#ra aktual akan sangat besar. 8al ini tidak dikehendaki dalam proses sorting. Dalam
kasus ini, sebuah tabel pointer bantu dapat digunakan agar pada proses sorting yang
dipindahkan adalah penunjukan pointer, bukan data aktual. 8al ini ditunjukan pada gambar
di ba-ah ini.
Tabel "ointer Tabel "ointer
A-al Key 5ield 3ain Terurut
Halaman 46
Algoritma Pemrograman
;e#ord % + DDD
;e#ord ' ' ...
;e#ord ) % AAA
;e#ord + , EEE
;e#ord , ) !!!
5ile Data
Tabel di bagian tengah adalah ile data dan tabel disisi kiri adalah tabel pointer a-al. Entry
pada posisi j dalam tabel pointer menunjuk ke re#ord j. "ada proses sorting, entri&entri pada
tabel pointer ini disesuaikan dengan penunjukannya, dan hasilnya ditunjukan pada tabel
pointer di sisi kanan. "ointer pertama akhirnya menunjuk ke re#ord ketiga dalam ile, dan
seterusnya. "erhatikan bah-a ada re#ord yang dipindahkan.
Terdapat banyak metode yang digunakan untuk melakukan pengurutan data. "rogrammer
harus memahami beberapa aktor penentu ( konsiderasi ) eisiensi yang saling berhubungan
agar dapat memilih se#ara tepat metode sorting yang mana yang paling tepat diterapkan
pada suatu masalah tertentu. .eberapa aktor penting yang menentukan eisiensi sebuah
metode sorting adalah $
- Caktu yang dibutuhkan oleh programmer untuk mengkodekannya ( membuat program
sorting ),
- Caktu komputasi yang dibutuhkan untuk mengeksekusi program sorting tersebut,
- :umlah memori B storage yang dibutuhkan untuk menyimpan B mengeksekusi program
sorting tersebut.
(e)uirement yang dituntut dari sebuah metode internal sorting adalah
penggunaan kapasitas memori yang tersedia se#ara ekonomis. Dengan kata
lain, pertukaran item&item data untuk
memperoleh urutan yang benar harus
dilakukan se#ara in situ. Metode yang
memindahkan item data dari sebuah array A
ke array . jelas tidak dikehendaki.
6kuran yang baik untuk menilai eisiensi sebuah
metode sorting adalah dengan menghitung jumlah
perbandingan ( comparison ) key B data dan jumlah peretukaran ( intercange ) key B data
yang dilakukan selama proses sorting. Kedua ukuran ini merupakan ungsi dari jumlah item
data n yang akan diurutkan.
Metode sorting yang baik membutuhkan jumlah perbandingan dalam orde ( n log n ).
Metode sorting sederhana ( straight method ) membutuhkan jumlah perbandingan dengan
orde n
'
. 2amun ada tiga alasan mengapa straight method perlu ditinjau sebelum kita
beranjak kepada metode&metode yang lebih #epat, yaitu $
Halaman 47
Algoritma Pemrograman
- straight method merupakan #ara tepat untuk menjelaskan karakteristik dari prinsip&
prinsip utama dalam sorting,
- program untuk straight method dapat dimengerti dengan mudah dan tidak panjang
sehingga kebutuhan starage&nya ke#il
- -alapun metode yang #epat membutuhkan jumlah operasi yang lebih sedikit, rin#ian
operasi&operasi ini biasanya rumit. :adi straight method lebih #epat bila diterapkan
untuk jumlah data n yang ke#il, namun tidak dianjurkan untuk jumlah data n yang besar.
).!. "OTA'/ O B1'A& < B/2 O "OTAT/O" =
"erhatikan tabel di ba-ah ini, 5ungsi *,*% n
'
@ %* n dikatakan berada dalam orde ungsi n
'
karena seiring dengan semakin besarnya nilai n, maka nilai ungsi tersebut akan semakin
mendekati nilai n
'
.
n A = 0,01 n
2
b = 10 n a + b ( a + b ) / n
2
10 1 100 101 1,01
50 25 500 525 0,21
100 100 1.000 1.100 0,11
500 2.500 5.000 7.500 0,03
1.000 10.000 10.000 20.000 0,02
5.000 250.000 50.000 300.000 0,01
10.000 1.000.000 100.000 1.100.000 0,01
50.000 25.000.000 500.000 25.500.000 0,01
100.000 100.000.000 1.000.000 101.000.000 0,01
500.000 2.500.000.000 5.000.000 2.505.000.000 0,01
Duketahui dua buah ungsi (n) dan g(n). ungsi (n) dukatakan berada dalam orde g(n) atau
(n) adalah =(g(n)) jika tedapat bilangan bulat posisti a dan b sedemikian rupa sehingga (n)
a > g(n) untuk semua n b.
(ebagai #ontoh, jika (n) ? n
'
@ %** n dan g(n) ? n
'
, maka (n) adalah =(g(n)) karena n
'
@
%** n 'n
'
untuk semua n %**. Dalam kasus ini, a ? ' dan b ? %**. 5ungsi (n) di atas
adalah juga =(n
)
) karena n
'
@ %** n 'n
)
untuk semua n 1.
:ika diketahui sebuah ungsi (n), maka terdapat banyak ungsi g(n) dimana ungsi (n)
adalah =(g(n)), dan untuk setiap ungsi g(n) tersebut terdapat banyak nilai a dan b yang
memenuhi kriteria di atas.
:ika (n) adalah =(g(n)) dan g(n) adalah =(h(n)), maka (n) adalah =(h(n)). (ebagai #ontoh $
n
'
@ %** n adalah =(n
'
) dan n
'
adalah =(n
)
) ( untuk nilai a?b?%), maka n
'
@ %** n adalah
=(n
)
). 8al ini disebut siat transiti.
:ika (n) adalah sebuah ungsi konstanta, yaitu (n) ? # untuk semua nilai n, maka (n)
adalah =(%), karena dengan menggeser a ? # dan b ? %, diperoleh bah-a # # > % untuk
semua n %.
:ika (n) ? # > g(n), dimana # adalah sebuah konstanta, maka (n) adalah =(g(n)).
.erikut ini adalah beberapa akta yang akan membentuk hirarki orde dari ungsi $
Halaman 48
Algoritma Pemrograman
- # adalah =(%) untk sembarang konstanta #,
- # > logk n adalah =(log n) untuk sembarang konstanta # dan k,
- # > n
k
adalah =(n
k
) untuk sembarang konstanta # dan k,
- # > n > logk n adalah =(n log n) untuk sembarang konstanta # dan k,
- # > n
j
> logk n adalah =(n
k
log n) untuk sembarang konstanta #, j dan k,
- # > n
j
> (logk n)
%
adalah =(n
k
(log n)
%
) untuk sembarang konstanta #, j, k dan l,
- # > n
k
adalah =(d
n
), namun d
n
tidak =(n
k
) untuk sembarang konstanta # dan k, dan d > %.

8irarki ungsi yang terbentuk dari akta&akta di atas adalah sebagai berikut, ( tiap ungsi
memiliki orde lebih rendah dari ungsi berikutnya ) $
!, log n, (log n)
k
, n, n(log n)
k
, n
k
, n
k
(log n)
k
, n
k@%
, d
k
.
5ungsi&ungsi yang ber&orde =(n
k
) untuk setiap nilai k dikatakan berada dalam polynomial
order, sedangkan ungsi&ungsi yang ber&orde =(d
n
) untuk setiap d >% tetapi tidak ber&orde
=(n
k
) untuk suatu nilai k dikatakan berada dalam exponential order.
"erbedaan antara ungsi polynomial&order dengan ungsi e>ponetial&order sangat penting.
(ebuah ungsi e>ponential order yang sederhana sekalipun, seperti '
n
, akan bertambah
jauh lebih #epat nilainya dibandingkan dengan polynomial&order, seperti n
k
, terlepas dari
berapapun nilai k.
Dengan menggunakan konsep orde di atas, berbagai metode sorting dapat dibandingkan
dan mengklasiikasikannya dalam golongan baikG atau burukG. 2amun jika mengehendaki
metode sorting yang optimalG, yaitu yang berorde =(n) terlepas dari urutan data yang
diinput, tidak akan ada metode yang dapat memenuhi hal tersebut.
(ebagian besar metode sorting yang akan ditinjau berikut ini mempunyai time re)uirement
antara =( n log n) hingga =(n
'
). 6ntuk orde=(n log n), jika ururtan ile bertambah %** kali,
maka sorting time akan berkurang dari '** kali ( dasar logaritnya adalah %* ). 6ntuk orde
=(n
'
), jika ukuran ile bertambah %** kali, maka sorting time akan bertambah %*.*** kali.
).% /"T1&"AL 'O&T B' ()*+A,-(
).%.1. 31TOD1 B#BBL1 'O&T
Metoide .ubble (ort termasuk pada golonga E>#hange (ort, dimana pertukaran tempat
anatar dua item data menjadi karakteristik utama dari proses pengurutan. Metode bubble
sort didasarkan pada prinsip perbandingan ( comparison ) dan pertukaran ( excange )
pasanga item data yang berdekatan ( ad&acent ) hingga semua data item terurut.
Keunggulan metoda .ubble sort adalah kemudahannya dipahami dan diprogram. 2amun
dari semua metode sort, metode ini termasuk pada metode yang paling tidak eisien.
Misalkan ] adalah sebuah array bertipe integer berisi n buah data yang akan diurutkan
guna men#apai kondisi $
]V i W ]V j W untuk % j n
Halaman 49
Algoritma Pemrograman
Metode .ubble sort menelusuri isi ile se#ara sekuensial beberapa kali. "ada tiap langkah
penelusuran ( pass B iterasi ), dilakukan pembandingan antara tiap item data dengan item
data berikutnya ( su##essor&nya), atau ]V%W dengan ]V i@% W, dan pertukaran posisi elemen
data apabila urutannya tidak tepat.
(ebagi #ontoh, perhatikan nilai&nilai data berikut ini $
', ,9 +1 )9 %' 0' 17 ))
Diasumsikan bah-a hendaknya melakukan pengurutan se#ara menaik (ascending). "ada
iterasi pertama, dilakukan perbandingan sebagai berikut $
]V%W dengan ]V'W ( ', dengan ,9 ) tidak terjadi pertukaran
]V'W dengan ]V)W ( ,9 dengan +1 ) terjadi pertukaran
]V)W dengan ]V+W ( ,9 dengan )9 ) terjadi pertukaran
]V+W dengan ]V,W ( ,9 dengan %' ) terjadi pertukaran
]V,W dengan ]V7W ( ,9 dengan 0' ) tidak terjadi pertukaran
]V7W dengan ]V9W ( 0' dengan 17 ) terjadi pertukaran
]V9W dengan ]V1W ( 0' dengan )) ) terjadi pertukaran
:adi, setelah iterasi pertama, urutan nilai data adalah sebagai berikut $
', +1 )9 %' ,9 17 )) C!
"erhatikan setelah iterasi pertama, nilai data terbesar, yaitu 0', terletak pada posisinya yang
seharusnya dalam array ( posisi terakhir ). (e#ara umum, data ]Vn&i@%W akan terletak pada
posisi seharusnya setelah iterasi yang ke i.
Metode ini disebut $u$$le sort* karena setiap nilai data se#ara perlahan&lahan $u$$les
( bergeser naik ke sisi kanan ) ke posisinya yang tepat. 2ilai
data yang besar akan bergeser lebih #epatG.
(etelah iterasi ke ', urutan nilai data adalah \
', )9 %' +1 ,9 ))
B? C!
"erhatikan bah-a 17 sebagai nilai
data terbesar kedua sudah terletak
pada posisi yang tepat.
Karena tiap iterasi menempatkan sebuah
nilai data ke posisi yang seharusnya, maka sebuah ile yang berisi n buah data
membutuhkan tidak lebih dari n&% iterasi.
/terasi lengkapnya adalah sebagai berikut$
A-al ', ,9 +1 )9 %' 0' 17 ))
/terasi % ', +1 )9 %' ,9 17 )) C!
Halaman 50
Algoritma Pemrograman
/terasi ' ', )9 %' +1 ,9 )) B? C!
/terasi ) ', %' )9 +1 )) >@ B? C!
/terasi + %' ', )9 )) )B >@ B? C!
/terasi , %' ', )) %@ )B >@ B? C!
/terasi 7 %' ', %% %@ )B >@ B? C!
/terasi 9 1! !> %% %@ )B >@ B? C!
(ebelum menulis programnya, ada beberapa hal yang harus diperhatikan.
Pertama, karena semua nilai data pada posisi lebih besar dari atau sama dengan n&i@%
telah menempati posisi seharusnya setelah iterasi /, maka nilai&nilai data tersebut tidak perlu
diikutsertakan lagi dalam proses perbandingan pada iterasi&iterasi selanjutnya. :adi pada
ietrasi pertama dilakukan n&% perbandingan, pada iterasi ke ' dilakukan n&' perbandingan,
dan pada interaksi ke&(n&%) hanya dilakukan perbandingan (yaitu antara ]V%W dan ]V'W.
Kedua. Diatas telah disebutkan bah-a dibutuhkan maksimal n&% interasi untuk mengurutkan
array berukuran n data. 2amun, pada #ontoh di atas, array telah terurut membesar setelah
interasi ke&,, sehingga interasi terakhir sebenarnya tidak perlu dilakukan (iterasi ke&7 dan
ke&9). 6ntuk menghilangkan interasi seperti ini, kita harus dapat mendeteksi apakah
sebuah array telah terurut atau belum.
Apabila array telah terurut, maka tidak terjadi pertukaran data apapun pada interasi
tersebut. :ika kondisi ini di#apai, tidak perlu dilakukan interasi berikutnya. Dengan #ara
seperti ini, jika ile dapat diurutkan dengan interasi kurang dari n&%, maka pada interasi
terakhir tidak dilakukan pertukaran data. "ada #ontoh di atas, proses dilakukan hingga
interasi ke&, masih terjadi pertukaran data.
Kode program untuk metode bubble sort dalam bahasa pas#al diberikan di ba-ah ini.
.erikut ini diberikan #ontoh kedua. "ada #ontoh ini, pergeseran terjadi kesisi kiri. (emakin
ke#il nilai data, semakin #epatG pergeserannya. "ada interasi pertama, nilai data terke#il
menempati posisi pertama dalam array\ pada interasi kedua, nilai data terke#il kedua
menempati posisi kedua dalam array\ dan seterusnya.
Halaman 51
Pro3ed&re B&bble Sort ;Dar 5 E ArrayType E N E i%te8er<;
Lar passA ?A tepA E i%te8er;
S4ap E boolea%;
Be8i%
S4ap E ! tr&e;
Pass E ! $;
/*ile ;pass >! N-$< a%d ;s4ap< do
B8i%
S4ap E ' 0alse;
#or ? E ! $ to N-pass do
I0 ;5M?N H 5M?'$N< t*e%
Be8i%
Blak&ka% s4appi%8:pert&kara% elee%N
s4ap E ! tr&e;
tep E ! 5M?N;
5M?N E ! 5M?'$N;
5M?'$E ! tep;
K%d;
Pass E ! pass ' $;
K%d;
K%d;
Algoritma Pemrograman
"ada #ontoh ini, proses pengurutan dilakukan hingga interasi ke&,, karena tidak terjadi lagi
pertukaran data pada interasi ini. /nterasi lengkapnya adalah.$
A-al ++ ,, %' +' 0+ %1 7 79
/nterasi % 7 ++ ,, %' +' 0+ %1 79
/nterasi ' 7 %' ++ ,, %1 +' 0+ 79
/nterasi ) 7 %' %1 ++ ,, +' 79 0+
/nterasi + 7 %' %1 +' ++ ,, 79 0+
/nterasi , 7 %' %1 +' ++ ,, 79 0+
:umlah perbandingan dilakukan pada interasi&i adalah n&i, jadi, jika dilakukan k kali interasi,
jumlah total perbandingan yang dilakukan adalah (n&%) @ (n&') @...@ (n&k) ? ('kn&k
'
&k)B'.
;ata&rata jumlah iterasi (k) adalah =(n
'
).
:umlah pertukaran yang dilakukan tergantung pada a-al data dalam arrayBile. 2amun,
jumlah pertukaran ini tidak mungkin lebih besar dari jumlah perbandingan. :umlah
pertukaran diperkirakan menghabiskan sebagian besar -aktu eksekusi algoritma, bukan
jumlah perbandingan. Dalam kasus terburuk, jumlah perbandingan dalam bubble sort
adalah (n
'
&n)B' dan jumlah pertukaran adalah (n
'
&n)B'. :adi, baik jumlah perbandingan
maupun jumlah pertukaran berorde =(n
'
).
Kelebihan bubble sort satu&satunya hanyalah kebutuhan akan memori tambahan ke#il, yaitu
hanya satu lokasi memori untuk menyimpan nilai sementara (template) dalam proses
pertukaran data, dan ordenya menjadi =(n) dalam kasus data masukan sudah Bhampir
terurut.
"erbaikan terhadap metode bubble sort dilakukan dengan algoritma shaker sort. "enjelasan
mengenai algoritma ini beserta #ontohnya dapat dilihat dalam VC/;97W.
).%.!. 31TOD1 D#/-K 'O&T <PA$T.T.#, ()*+A,-( !#$T=
Metode Yui#k sort, yang dibuat oleh !.A.; 8oare, didasarkan
pada akta bah-a pertukaran (e>#hange)
mungkin dapat dilakukan antara ' item data
yang posisinya berjauhan agar proses
pengurutan menjadi lebih eekti. :adi,
metode ini tergolong dalam kelompok
e>#hange sort.
Diasumsikan ] adalah sebuah array berisi 2 buah data yang akan diurutkan.
Kita memilih sebuah elemen A dari posisi tertentu dalam array (misalnya A adalah elemen
pertama\ A ? ]V%W). 2ilai A disebut elemen kun#i atau pi<ot atau #omparand. (emua elemen
data dalam array ] dibagi menjadi dua sedemikian rupa sehingga A diletakan pada posisi j
dan kondisi&kondisi berikut dipenuhi $
(etiap elemen data pada posisi % s.d j &% nilainya lebih ke#il dari atau sama
dengan nilai pi<ot A.
Halaman 52
Algoritma Pemrograman
(etiap elemen data pada posisi j@% s.d n nilainya lebih besar dari atau sama
dengan nilai pi<ot A.
"erhatikan bah-a setiap kedua kondisi tersebut terpenuhi untuk nilai A dan j tertentu, maka
A akan teteap terletak pada posisi j setelai array selesai diurutkan. :ika proses ini diulang
untuk subarray ]V%W F ] Vj&%W, untuk subarray ]Vj@%W F ]V2W, dan seterusnya untuk subarray&
subarray yang terbentuk dalam interasi&interasi berikutnya, maka hasil akhirnya adalah
sebuah ile yang terurut.
.erikut ini diberikan sebuah #ontoh. 6rutan data a-al dalam array adalah sbb.$
', ,9 +1 )9 %' 0' 17 ))
2ilai data pertama, yaitu ',, diletakan pada posisi yang seharusnya hasilnya adalah\
%' ', ,9 +1 )9 0' 17 ))
"ada titik ini, ', terletak pada posisi yang tepat, yaitu ]V'W. (etiap data yang letaknya
sebelum posisi ke&', yaitu %', nilainya lebih ke#il dari atau sama dengan ',, dan setiap data
yang letaknya setelah posisi ke&', yaitu ,9, +1, )9, 0', 17, dan )), nilainya lebih besar dari
atau sama dengan ',.
Karena ', telah terletak pada posisi yang benar, maka masalah a-al telah dibagi
(dekomposisi) menjadi masalah pengurutan dua buah subarray, yaitu $
V%'W dan V,9 +1 )9 0' 17 ))W
Karena sub array pertama berisi % nilai data, maka sub array tersebut telah terurut dan tidak
perlu diproses. 6ntuk mengurutkan sebarray kedua, proses di atas diulangi dan subarray ini
kemudian dibagi lagi menjadi dua subarray baru ,9 diambil sebagai nilai pi<ot. 8asilnya
adalah $
V+1 )9 ))W ,9 V0' 17W
8asil tiap tahap pengurutan selengkapnya adalah sbb .$
', ,9 +1 )9 %' 0' 17 ))
E1!F ', E>@ )B %@ C! B? %%F
%' ', E>@ )B %@ C! B? %%F
%' ', E)B %@ %%F ,9 EC! B?F
%' ', E%@ %%F +1 ,9 EC! B?F
%' ', E%%F )9 +1 ,9 EC! B?F
%' ', )) )9 +1 ,9 EB?F 0'
%' ', )) )9 +1 ,9 17 0'
Algoritma untuk metode Yui#k sort dapat dituliskan dengan mudah dalam bentuk prosedur
rekursi. Diba-ah ini diberikan algoritma untuk prosedur Rui#k(3., 6.) yang mengurutkan
semua item data dalam array ] diantara posisi ]V3.W dan ]V6.W, dimana 3. adalah batas
ba-ah (lo-er bound) dan 6. adalah batas atas (upper bound).
Halaman 53
Algoritma Pemrograman
Algoritma rekursi untuk Yui#k sort
(alah satu #ara untuk melakukan pemilihan array (dalm prosedur partition) dengan eisien
adalah sebagai berikut. Asumsikan A ? ]V3.W adalah item data yang akan di#ari posisi
sebenarnya. Dua buah pointer, yaitu up dan do-n, diinisialisasikan dengan batas ba-ah
dan batas kiri dari subarray. "ada setiap titik selama eksekusi, tiap item data pada posisi di
atas B di kanan up nilainya lebih besar dari atau sama dengan nilai A, dan tiap item pada
posisi di ba-ah Bdi kiri do-n nilainya lebih ke#il dari atau sama dengan nilai A. Kedua
pointer up dan do-n ini digeser mendekati satu sama lain dengan #ara berikut $
3angkah %.
2aikkan (in#rement) nilai pointer do-n satu posisi se#ara berulang&ulang
hingga ]Vdo-nW Q A.
3angkah '.
Turunkan (de#rement) nilai pointer up satu posisi se#ara berulang&ulang
hingga ]VupW S A.
3angkah ).
:ika (up Q do-n), pertukarkan posisi ]Vdo-nW dengan ]VupW.
"roses diatas diulangi hingga kondisi pada langkah ) tidak dipenuhi
(up S do-n). "ada titik ini ]Vup[ dipertukarkan dengan ]V3.W (yaitu
pi<ot A), dan nilai j diset menjadi up. .erikut ini akan
diberikan gambaran mengenai pross tersebut, dimana
ditunjukan posisi dari up dan do-n.
Do-n up
!> ,9 +1 )9 %' 0' 17 %%
do-n up
', >@ +1 )9 %' 0' 17 %%
do-n up
', >@ +1 )9 %' 0' 17 %%
do-n up
Halaman 54
I0 ;JB > UB< t*e%
B?ika JB H UBA aka array tela* ter&r&tC
be8i%
Bpili* ite-
,
dari s&barray sedeikia% r&pa se*i%88a sala* sat& ite ;isal 5;MJBN<
Berada pada posisi 5 M?N
;? er&paka% paraeter o&tp&t< da% berlak& E
$@ ( MiN > ( M?N &%t&k JB > i > ?
,@ ( MiN H ( M?N &%t&k ? > i > UB
( M?N tela* berada pada posisi ya%8 se*ar&s%ya @C
partitio% ;JBA UBA ?<;
Bsort s&barray a%tara (MJB da% (M?-$NC
O&i3k ;JBA ?-$<;
Bsort s&barray a%tara (M?'$N da% (MUBNC
O&i3k ;?'$A UB<;
K%d;
Algoritma Pemrograman
', >@ +1 )9 %' 0' B? ))
do-n up
', >@ +1 )9 %' C! 17 ))
do-n up
', >@ +1 )9 1! 0' 17 ))
do-n up
', 1! +1 )9 >@ 0' 17 ))
do-n up
', 1! +1 )9 >@ 0' 17 ))
do-n up
', %' )B )9 >@ 0' 17 ))
do-n up
', %' )B )9 >@ 0' 17 ))
do-n up
', %' )B )9 ,9 0' 17 ))
up,do-n
', %' )B )9 ,9 0' 07 ))
up do-n
', 1! )B )9 ,9 0' 17 ))
up do-n
%' !> )B )9 ,9 0' 17 ))
"ada titik ini, ', telah berada di posisi yang seharusnya, yaitu posisi ke&', dan semua item
di sisi kirinya lebih ke#il dari atau sama denagn ',, dan semua item disisi kanannya lebih
besar dari atau sama dengan ',.
(ekarang proses dilanjutkan untuk mengurutkan dua subarray yang terbentuk, yaitu (%')
dan (+1 )9 ,9 0' 17 ))) dengan menerapkan metode yang sama.
Algoritma di atas dapat diimplementasikan dengan prosedur seperti berikut ini $
Halaman 55
Pro3ed&re Partitio% ; JBA UB E i%te8er; Dar ? E i%te8er <;
Lar &pA do4%A AA tep E i%te8er;
Be8i%
; A adala* piDot tabel ya%8 aka% dite%t&ka% posisi%ya <
A E! 5MJBN
Up E! UB; do4% E! JB;
/*ile ; do4% > &p < do
Be8i%
/*ile B 5Mdo4%N >! A< a%d ; do4% > UB < do
Do4%E! do4% ' $;
/*ile ;5M&pN H A< do
UpE! Up ' $;
I0 ;do4% > Up< t*e%
Be8i%
;pert&kara% 5M&pN da% 5Mdo4%N<
te%p E! 5M&pN;
5M&pN E! 5Mdo4%N;
5Mdo4%N E! te%p;
K%d;
K%d;
5MJBN E! 5MUpN;
5MUpN E! A;
J E! Up;
K%d;
Pro3ed&re O&i3kSort ; JBA UB E i%te8er<;
Lar ? E i%te8er;
Be8i%
I0 ;JB > UB< t*e%
Be8i%
Partitio%;JBAUBA?<;
O&i3kSort;JBA?-$<;
O&i3kSort;?'$AUB<
K%d;
K%d;
K%d;
Algoritma Pemrograman
.entuk algoritma lain yang juga dapat diterapkan dalam metode Rui#k (ort adalah sebagai
berikut $
- Deinisikan ' buah pointer / dan j. 3akukan inisialisasi / ? % dan j ? n ( jumlah data ),
- .andingkan ]V i W dan ] V j W,
:ika ]V i W S ] V j W, tidak perlu dilakukan pertukaran, dan nilai j dikurangi %, lalu proses di
atas diulangi,
:ika ]V i W Q ] V j W, lakukan pertukaran,
- (etelah terjadi pertukaran untuk pertama kali, nilai i ditambah %. "roses perbandingan
dilanjutkan dan nilai i ditambah % hingga terjadi pertukaran berikutnya,
- (etelah terjadi pertukaran untuk kedua kali, nilai j dikurangi % kembali, demikian
seterusnya.
Dengan kata lain, dilakukan proses $urning te candle at $ot endsG ( membakar lilin pada
kedua ujungnya ). .erikut ini diberikan sebuah #ontoh eksekusi algoritma di atas. (2ilai ]V i W
dan ] V j W di#etak tebal).
- Kondisi a-al ( i ? %, j ? n ? %7, ]V i W ? ,*), ] V j W ? 9*) $
>G% 19 ,%' 7% 0*1 %9* 109 '9,
7,) +'7 %,+ ,*0 7%' 799 97, @G%
- Kurangi nilai j hingga j ? %%, ]V % W Q ]V %% W, atau ,*) Q %,+, terjadi pertukaran ke&%\ i ?
%, j ? %%.
1>) 19 ,%' 7% 0*1 %9* 109 '9,
7,) +'7 >G% ,*0 7%' 799 97, 9*)
- Tambah nilai i hingga i ? ), ]V ) W Q ]V %* W, atau ,%' Q ,*), terjadi pertukaran ke&'\ i ?
), j ? %%.
%,+ 19 >G% 7% 0*1 %9* 109 '9,
7,) +'7 >1! ,*0 7%' 799 97, 9*)
- Kurangi nilai j hingga j ? %*, ]V ) W Q ]V %* W, atau ,*) Q +'7, terjadi pertukaran ke&)\ i ?
), j ? %*.
%,+ 19 )!? 7% 0*1 %9* 109 '9,
7,) >G% ,%' ,*0 7%' 799 97, 9*)
- Tambah nilai i hingga i ? ,, ]V , W Q ]V %* W, atau 0*1 Q ,*), terjadi pertukaran ke&+\ i ?
,, j ? %*.
%,+ 19 +'7 7% >G% %9* 109 '9,
7,) CGB ,%' ,*0 7%' 799 97, 9*)
- Kurangi nilai j hingga j ? 1, ]V , W Q ]V 1 W, atau ,*) Q '9,, terjadi pertukaran ke&,\ i ? ,, j
? 1.
%,+ 19 +'7 7% !@> %9* 109 >G%
7,) 0*1 ,%' ,*0 7%' 799 97, 9*)
- Tambah nilai i hingga i ? 9, ]V 9 W Q ]V 1 W, atau 109 Q ,*), terjadi pertukaran ke&7\ i ? 9, j
? 1.
%,+ 19 +'7 7% '9, %9* >G% BC@
Halaman 56
Algoritma Pemrograman
7,) 0*1 ,%' ,*0 7%' 799 97, 9*)
"erhatikan bah-a semua perbandingan dalam #ontoh di atas melibatkan item data ,*).
(e#ara umum, tiap perbandingan akan melibatkan nilai a-al ]V%W, karena data tersebut
terus mengalami pertukaran posisi tiap kali arah proses diganti ( nilai i ditambah atau nilai j
dikurangi ). "ada saat i ? j , item data ]V % W ini telah men#apai posisi yang seharusnya
karena terlihat bah-a tidak ada lagi data yang lebih besar yang terletak disisi kirinya atau
data yang lebih ke#il disisi kanannya.
5ile a-al telah mengalami pemilihan ( partitioned ) sedemikian rupa sehingga masalah
pengurutan a-al telah berubah menjadi ' buah masalah baru yang lebih sederhana, yaitu
mengurutkan ]V % W sBd ]V i&% W dan ]Vi@% W sBd ]V n W. Algoritma diterapkan untuk
mengurutkan kedua sub ile ini.
Di ba-ah ini dituliskan hasil lengkap tiap iterasi untuk #ontoh di atas. Tanda kurung siku
menunjukan subile&subile yang masih akan diurutkan dan yang di#etak tebal menunjukan
item data telah menempati posisi seharusnya. Dalam progra, subile ini dapat
direpresentasikan dengan dua <ariable 3.( lo+er $ound ) dan 6.( Upper $ound ), yang
menunjukkan batas dari subile yang sedang diproses. Disamping itu juga terdapat sebuah
stack yang berisi nilai <ariable 3. dan 6. untuk subile&subile lain yang menunggu untuk
diproses.
- 3. ? %, 6. ? %7, (ta#k ?VW
V,*) 19 ,%' 7% 0*1 %9* 109 '9,
7,) +'7 %,+ ,*0 7%' 799 97, 9*)W
- 3. ? %, 6. ? 7, (ta#k ?V(1,%7)W
V%,+ 19 +'7 7% '9, %9*W >G%
V109 7,) 0*1 ,%' ,*0 7%' 799 97, 9*)W
- 3. ? %, 6. ? ', (ta#k ?V(+,7),(1,%7)W
V7% 19W 1>) V+'7 '9, %9*W >G%
V109 7,) 0*1 ,%' ,*0 7%' 799 97, 9*)W
- 3. ? +, 6. ? 7, (ta#k ?V(1,%7)W
?1 B@ 1>) V+'7 '9, %9*W >G%
V109 7,) 0*1 ,%' ,*0 7%' 799 97, 9*)W
- 3. ? +, 6. ? ,, (ta#k ?V(1,%7)W
?1 B@ 1>) V%9* '9,W )!? >G%
V109 7,) 0*1 ,%' ,*0 7%' 799 97, 9*)W
- 3. ? 1, 6. ? %7, (ta#k ?VW
?1 B@ 1>) 1@G !@> )!? >G%
V109 7,) 0*1 ,%' ,*0 7%' 799 97, 9*)W
- 3. ? 1, 6. ? %+, (ta#k ?VW
?1 B@ 1>) 1@G !@> )!? >G%
V9*) 7,) 97, ,%' ,*0 7%' 799W BC@ CGB
- 3. ? 1, 6. ? %', (ta#k ?VW
?1 B@ 1>) 1@G !@> )!? >G%
Halaman 57
Algoritma Pemrograman
V7,) ,%' ,*0 7%' 799W @G% @?> BC@ CGB
- 3. ? 1, 6. ? %%, (ta#k ?VW
?1 B@ 1>) 1@G !@> )!? >G%
V7,) ,%' ,*0 7%'W ?@@ @G% @?> BC@ CGB
- 3. ? 0, 6. ? %%, (ta#k ?VW
?1 B@ 1>) 1@G !@> )!? >G% >GC
V7,) ,%' 7%'W ?@@ @G% @?> BC@ CGB
- 3. ? 0, 6. ? %*, (ta#k ?VW
?1 B@ 1>) 1@G !@> )!? >G% >GC
V,%' 7%'W ?>% ?@@ @G% @?> BC@ CGB
- 3. ? &, 6. ? &, (ta#k ?VW
?1 B@ 1>) 1@G !@> )!? >G% >GC
>1! ?1! ?>% ?@@ @G% @?> BC@ CGB
;ata&rata jumlah perbandingan untuk metode Yui#k sort adalah =(n log n). Rui#k sort
menunjukan perormansi terbaik kasus array B ile yang terurut sama sekali. Kasus terburuk
untuk metode ini terjadi bila tabel terurut, karena jumlah perbandingan menjadi berorde
=(n
'
). 8al sebaliknya berlaku untuk metode bubble sort ( kasus terbaiknya adalah data
terurut). Dalam kasus seperti ini, metode Yui#k sort juga tidak lebih baik dibandingkan
dengan sele#tion sort.
Karena berorde =(n log n) dan o<erhead&nya yang rendah, metode Yui#k sort menjadi
metode ter#epat yang sering digunakan dalam praktek.
).). /" T1&"AL 'O&T/"2 7 'O&T/"2 B4 '1L1-T/O"
Dalam metode sele#tion sort, item data dipilih satu persatu sesuai dengan urutannya dan
ditempatkan ke posisinya yang benar. /tem&item data input tersebut mungkin perlu melalui
tahap pemrosesan a-al ( prepro#essing) terlebih dahulu agar pemilihan se#ara terurut
(ordered sele#tion) dapat dilakukan. (emua jenis sele#tion sort se#ara konseptual dapat
dituliskan dalam bentuk algoritma umum berikut, dimana digunakan sebuah descending
priority )ueue (D"R). "erlu diingat bah-a operasi "R /nsert menambahkan elemen baru ke
dalam priority Yueue dan operasi "R Ma>Delete mengambil elemen dengan nilai terbesar
dari dalam priority Yueue.
Algoritma ini disebut 2eneral 'election 'ort. "erhatikan bah-a tahap sele#tion dilakukan
dengan serangkaian penghapusan ( deletion ) item dari dalam priority Yueue, meskipun
Halaman 58
Set DPO e%?adi seb&a* des3e%di%8 priority =&e&e koso%8;
;lak&ka% preprocessing ter*adap ite-ite dala array i%p&t de%8a% 3ara e%8i%sert%ya ke
dala priority =&e&e<
0or I ! $ to N do
PO I%sert ;DPOA5M i N <
;pili* tiap elee% sat& per sat& ses&ai &r&ta%%ya<
0or I ! N do4% to $ do
5M i N E! PO 2a(Delete ;DPO<
Algoritma Pemrograman
sebenarnya yang dibutuhkan adalah penelusuran Yueue dengan urutan menurun (
descending order ).
.erikut ini akan ditinjau beberapa metode sele#tion sort. Ada dua hal yang membedakan
satu metode dengan metode yang lain. "ertama adalah struktur data yang digunakan untuk
mengimplementasikan priority Yueue. Kedua adalah metode yang digunakan untuk
mengimplementasikan algoritma umum di atas.
).).1. 31TOD1 'T&A/2,T '1L1-T/O" 'O&T
Metode straight sele#tion sort mengimplementasikan sdes#ending priority Yueue sebagai
sebuah array tak terurut. Array input ] digunakan untuk mengelola priority Yueue, sehingga
tidak mengakibatkan adanya tambahan kebutuhan space,memori . Array input ] merupakan
sebuah array tak terurut sehingga direpresentasikan des#ending priority Yueue dengan
elemen. Karena bentuk inputnya sudah seperti yang dikehendaki, tidak perlu lagi dilakukan
tahap preprocessing.
Karena itu, metode ini seluruhnya hanya terdiri dari tahap sele#tion dimana se#ara
berulang&ulang nilai data terbesar B ter ke#il ( <ariable max atau min ) dianatar data yang
tersisa ( belum terurut ) ditempatkan keposisi yang seharusnya. 6ntuk melakukan hal ini,
max,min dipertukarkan letaknya dengan elemen ]V i W, dimana i adalah nomor iterasi. "riority
Yueue yang pada a-alnya berisi n elemen mengalami pengurangan elemen satu demi satu
pada setiap iterasi. (etelah (n&%) kala sele#tion, keseluruhan array menjadi terurut.
:adi langkah&langkah yang dilakukan dalam metoda ini adalah $
- "ilih item data dengan nilai data terke#il ( minimum selection sort ) atau terbesar (
maximim selection sort ),
- "ertukarkan posisinya dengan item data pertama ]V i W,
- 6langi operasi ini untuk (2&%) item data yang tersisa, kemudian untuk (2&') item data
yang tersisa, hingga tinggal % item data yang tersisa, yaitu item data ternesarBterke#il.
8asil akhir dari minimum sele#tion sort adalah data terurut menaik ( as#ending), sedangkan
hasil akhir dari ma>imum sele#tion sort adalah data terurut menurun ( des#ending). Dua
#ontoh kasus untuk masing&masing jenis sele#tion sort tersebut diberikan di ba-ah ini $
).).1.1. 3/"/3#3 '1L1-T/O" 'O&T
A-al ', ,9 +1 )9 %' 0' 17 ))
/terasi % 1! ,9 +1 )9 ', 0' 17 ))
/terasi ' 1! !> +1 )9 ,9 0' 17 ))
/terasi ) 1! !> %% )9 ,9 0' 17 +1
/terasi + 1! !> %% %@ ,9 0' 17 +1
/terasi , 1! !> %% %@ )B 0' 17 ,9
/terasi 7 1! !> %% %@ )B >@ 17 0'
/terasi 9 1! !> %% %@ )B >@ B? C!
A-al ++ ,, %' +' 0+ %1 7 79
/terasi % ? ,, %' +' 0+ %1 ++ 79
/terasi ' ? 1! ,, +' 0+ %1 ++ 79
/terasi ) ? 1! 1B +' 0+ ,, ++ 79
Halaman 59
Algoritma Pemrograman
/terasi + ? 1! 1B )! 0+ ,, ++ 79
/terasi , ? 1! 1B )! )) ,, 0+ 79
/terasi 7 ? 1! 1B )! )) >> 0+ 79
/terasi 9 ? 1! 1B )! )) >> ?@ C)
).).1.!. 3A/3#3 '1L1-T/O" 'O&T
A-al ', ,9 +1 )9 %' 0' 17 ))
/terasi % C! ,9 +1 )9 %' ', 17 ))
/terasi ' C! B? +1 )9 %' ', ,9 ))
/terasi ) C! B? >@ )9 %' ', +1 ))
/terasi + C! B? >@ )B %' ', )9 ))
/terasi , C! B? >@ )B %@ ', %' ))
/terasi 7 C! B? >@ )B %@ %% %' ',
/terasi 9 C! B? >@ )B %@ %% !> 1!
A-al ++ ,, %' +' 0+ %1 7 79
/terasi % C) ,, %' +' ++ %1 7 79
/terasi ' C) ?@ %' +' ++ %1 7 ,,
/terasi ) C) ?@ >> +' ++ %1 7 %'
/terasi + C) ?@ >> )) +' %1 7 %'
/terasi , C) ?@ >> )) )! %1 7 %'
/terasi 7 C) ?@ >> )) )! 1B 7 %'
/terasi 9 C) ?@ >> )) )! 1B 1! ?
.erikut ini dituliskan dua <ersi kode program untuk prosedur minimum straight sele#tion sort.
"erbedaan diantara keduanya hanya sedikit, yaitu pada titik a-al penelusuran array untuk
penempatan item data terke#il B terbesar.
Halaman 60
Pro3ed&re 2i%Sele3tio% ; Lar 5 E ArrayType; N E i%te8er <;
Lar iA ?A id(A a( E i%te8er ;
Be8i%
#or i E! N do4% to , do
Be8i%
2a( E! (M$N;
Id( E!$;
#or ? E! , to i do
I0 ;5M?N H a( < t*e%
Be8i%
2a( E! (M?N;
Id( E!?;
K%d;
(Mid(N E ! (MiN
(MiN E! a(;
e%d;
e%d;
Pro3ed&re 2i%Sele3tio% ; Lar 5 E ArrayType; N E i%te8er <;
Lar iA ?A id(A a( E i%te8er ;
Be8i%
#or i E! $ to N-$ do
Be8i%
2i% E! (MiN;
Id( E!i;
#or ? E! ; i'$< to N do
I0 ;5M?N > i% < t*e%
Be8i%
2i% E! (M?N;
Id( E!?;
K%d;
(Mid(N E ! (MiN
(MiN E! i%;
e%d;
e%d;
Algoritma Pemrograman
Dalam straight sele#tion sort, jumlah perbandingan yang dilakukan adalah ( n
'
Fn )B'. :adi
jumlah perbandingan berorde =(n
'
). :umlah pertukaran yang dilakukan selalu n&% ( ke#uali
jika dilakukan penge#ekan terlebih dahulu untuk menghindari sebuah item data
dipertukarkan dengan dirinya sendiri ). Calaupun ordenya =(n
'
), metode ini lebih #epat
dibandingkan bubble sort. Tidak ada perubahan perormansi apabila ile input telah berurut
atau sama sekali belum terurut. "enggunaan metoda ini dianjurkan untuk jumlah data yang
ke#il
).>. /"T1&"AL 'O&T B4 /"'1&T/O"
Metode insertion sort ialah teknik yang mengurutkan sekumpulan re#ord dengan #ara
menyisipkan re#ord&re#ord ke dalam sebuah ile yang telah terurut.
).>.1. 31TOD1 'T&A/2,T /"'1&T/O" 'O&T
Metode straight insertion B simple sort dapat dipandang sebagai sebuah generasi general
selection sort dimana priority Yueue&nya diimplementasikan sebagai sebuah array terurut.
Pang dibutuhkan hanyalah tahap preprocessing untuk meng&insert item&item data ke dalam
priority Yueue. (etelah item&item tersebut selesai di insert, semua telah terurut sehingga
tidak diperlukan tahap selection.
:ika ile a-alnya telah terurut, hanya dibutuhkan satu kali pembandingan pada tiap iterasi,
sehingga ordernya menjadi =(n). :ika ile a-alnya terurut terbalik ( re'erse order ), orde
metode ini menjadi =(n
'
), karena jumlah pembandingan yang dilakukan adalah $
(n&%)@ (n&')@ (n&))@ H @ )@ ' @ % ? (n
'
F n )B'
Meskipun ordenya sama, staright insertion sort umumnya lebih baik dibandingkan bubble
sort. (emakin terurut ile data a-alnya, semakin eisien pula metoda ini bekerja. ;ata&rata
jumlah pembandingan dalam metode ini adalah (n
'
). (pa#e tambahan hanya dibutuhkan
untuk menyimpan sebuah <ariable sementara ( template ).
.erikut ini diberikan dua buah #ontoh pengurutan dengan straight insertion sort. "ada
gambar diba-ah ini dituliskan kode program dalam bahasa "as#al untuk metode ini.
A-al ', ,9 +1 )9 %' 0' 17 ))
/terasi % !> ,9 +1 )9 %' 0' 17 ))
/terasi ' !> )B ,9 )9 %' 0' 17 ))
/terasi ) !> %@ )B >@ %' 0' 17 ))
/terasi + 1! !> %@ )B >@ 0' 17 ))
/terasi , 1! !> %@ )B >@ C! 17 ))
/terasi 7 1! !> %@ )B >@ B? C! ))
/terasi 9 1! !> %% %@ )B >@ B? C!
A-al ++ ,, %' +' 0+ %1 7 79
/terasi % )) >> %' +' 0+ %1 7 79
/terasi ' 1! )) >> +' 0+ %1 7 79
/terasi ) 1! )) )! >> 0+ %1 7 79
/terasi + 1! )) )! >> C) %1 7 79
/terasi , 1! 1B )) )! >> C) 7 79
/terasi 7 ? 1! 1B )) )! >> C) 79
/terasi 9 ? 1! 1B )) )! >> ?@ C)
Halaman 61
Algoritma Pemrograman
Halaman 62
Algoritma Pemrograman
).>.!. ',1LL 'O&T < D/3/"/',/"2 /"-&131"T 'O&T =
Metode shell sort dibuat oleh Donald 3. (hell ( %01, ). Metode ini membagi F bagikan ile
data a-al menjadi beberapa subile. (ubile F subile ini berisi setiap item data kelipatan ke
F k dalam ile a-alnya. 2ilai k ini disebut in#rement.
(ebagai #ontoh, jika k ? ,, maka subile yang pertama diproses adalah subile yang berisi
item data ]V%W, ]V7W, ]V%%W,H Dengan #ara seperti ini akan terdapat , buah yang masing F
masing berisi %B , data dari ile a-al, yaitu $
(ubile % ]V%W ]V7W ]V%%W dst
(ubile ' ]V'W ]V9W ]V%'W dst
(ubile ) ]V)W ]V1W ]V%)W dst
(ubile + ]V+W ]V0W ]V%+W dst
(ubile , ]V,W ]V%*W ]V%,W dst
(e#ara umum, jika digunakan nilai in#rement k ( terdapat k buah subile ), maak elemen
data ke F / dari subile ke& j adalah ]V/&%W> k @ j )
(etelah k buah subile ini selesai diurutkan ( biasanya dengan menggunakan metode straigt
insertion sort ), dipilih sebuah nilai baru yang lebih ke#il untuk in#rement k dan ile kembali
kembali dibagi ke dalam kumpulan subile F subile baru berdasarkan nilai k ini. Masing F
masing subile yang berukuran lebih besar ini ( karena nilai k lebih ke#il ) diurutkan, dan
proses ini diulangi kembali dengan nilai k yang lebih ke#il.
"ada akhirnya, nilai in#rement k ini diset sama dengan satu, sehingga yang diproses adalah
% buah subile yang berisi keseluruhasn data yang ada diile a-al. 6rutan nilai in#rement
yang menge#il ini telah ditetapkan pada a-al proses sorting ( diminish beraryi mengurangi )
Halaman 63
Pro3ed&re I%sertio% ;Dar 5EArrayType; NEi%te8er<;
Lar kA iA y E i%te8er;
#o&%d E boolea%;
Be8i%
;5M$N er&paka% array ya%8 ter&r&t de%8a% $ ite@
Di ak*ir tiap iterasiA ite 5M$N-5MkN tela* ter&r&t@<
#or k E! , to N do
Be8i%
1 E! 5MkN;
; Se&a data ya%8 lebi* besar dari y di 8eser Sat&
posisi ke sebela* ka%a% <
i E! k 9 $;
0o&%d E! 0alse;
4*ile ; i H! $< a%d ;%ot 0o&%d< do
i0 ;y > 5MiN< t*e%
be8i%
5Mi'$N E! 5M$N;
i E! i 9$;
e%d
else 0o&%d E! tr&e;
; i%sert 5MkN ke posisi ya%8 tepat <
5;i'$< E! y;
K%d;
K%d;
Algoritma Pemrograman
(ebagi #ontoh, jika ile a-al berisi item F item data beriktu $
', ,9 +1 )9 %' 0' 17 ))
dan urutan nilai in#rement k yang dipilih adalah ( ,,),% ), maka pada tiap iterasi akan
diurutkan subile F subile berikut $
/terasi % ( /n#rement ? , )
(]V%V, ]V7W) (]V'W, ]V9W)
(]V)W, ]V1W) (]V+W)
(]V,W)
iterasi ' ( in#rement k ? ) )
(]V%W, ]V+W, V9W) (]V'W, ]V,W, ]V1W)
(]Z)W,]V7W
iterasi ) ( in#rement k ? % )
(]V%W, ]V'W, ]V)W, ]V+W, ]V,W, ]V7W, ]V9W, ]V1W)
Tahapan proses pengurutannya ditunjukkan beriktu ini. /tem data yang berada dalam subile
yang sama dihubunhkan dengan tanda garis. Tiap subile tersebut diurutkan dengan
menggunakan metode straight insertion sort.
Kondisi ', ,9 +1 )9 %' 0' 17 ))
A-al
/terasi ' ', ,9 +1 )9 %' 0' 17 ))
K ? ,
/terasi ' ', ,9 )) )9 %' 0' 17 +1
K ? )
/terasi ) ', %' )) )9 +1 0' 17 ,9
K ? %
Kondisi %' ', )) )9 +1 ,9 17 0'
Terurut
/de di belakang metode shell sort ini #ukup sederhana. Telah disebutkan seblumnay bah-a
starigt insertion sort sangat eisein untuk ile data yang hampir terurut. :uga penting untuk
disadari bah-a apabila ukuran ile ke#il, maka metode sort berorde ) (n') sering lebih eisien
dibandingkan metode yang berorde * (n log n ). Karena nilai in#rement pertama yang
digunakan oleh shell sort #ukup besar, maka ukuran tiap subile menjadi ke#il, sehingga
proses staright insertion terhadap subile F subile ini menjadi #epat. Tiap pengurutan subile
ini membuat keseluruhan ile menjadi semakin terurut.
Karena itu meskipun iterasi F iterasi berikutnya menggunakan nilai in#rement yang lebih
ke#il sehingga menyebabkan subile semakain besar, namun subile F subile tersebut
sudah berada dalam kondisi hampir terurut sebagi hasil dari iterasi sebelumnya. /nsertion
sort terhadap subile F subile ini juga akan berlangsung #ukup eisien.
Halaman 64
Algoritma Pemrograman
=rde metode shell sort adalah * (n ( log 2 )') jika digunakan urutan nilai in#rement yang
tepat. Knuth merekomendasikan pemilihan nilai in#rement sebagai berikut $
Deinisikan ungsi se#ara rekursi sehingga h0%* ?% dan h(/ @%) ? )>h(i* @. Misalkan >
adalh bilangan bulat terke#il sedemikian rupa sehingga h(>) .n. (et nilai 2umeri# ( jumlah
in#rement) menjadi > F' dan set /n#V%W menjadi h(2umeri# F% @%) untuk / mulai dari s.d.
2um/n#.
.erikut ini akan diberikan #ontoh kedua tangan n ? %7 dan dua alternati urutan k ,
yaitu (1,+,',%) dan (9,,,),%).
K ? 1 ,*) 19 ,%' 7% 0*1 %9* 109 '9,
7,) +'7 %,+ ,*0 7%' 799 97, 9*)
k ? + ,*) 19 %,+ 7% 7%' %9* 97, '9,
7,) +'7 ,%' ,*0 0*1 799 109 9*)
k ? ' ,*) 19 %,+ 7% 7%' %9* ,%' '9,
7,) +'7 97, ,*0 0*1 799 109 9*)
k ?% %,+ 7% ,*) 19 ,%' %9* 7%' '9,
7,) +'7 97, ,*0 109 799 0*1 9*)
8asil $ 7% 19 %,+ %9* '9, +'7 ,*) ,*0
,%' 7%' 7,) 799 9*) 97, 109 0*1
k ? 9 ,*) 19 ,%' 7% 0*1 %9* 109 '9,
7,) +'7 %,+ ,*0 7%' 799 97, 9*)
k ? , '9, 19 +'7 7% ,*0 %9* 799 ,*)
7,) ,%' %,+ 0*1 7%' 109 97, 9*)
Halaman 65
Algoritma Pemrograman
k ? ) %,+ 19 +'7 7% ,*0 %9* 799 ,*)
7,) ,%' '9, 0*1 7%' 109 97, 9*)
k ? % 7% 19 %9* %,+ '9, +'7 ,%' ,*)
7,) 7%' ,*0 97, 799 109 0*1 9*)
8asil $ 7% 19 %,+ %9* '9, +'7 ,*) ,*0
,%' ,%' 7,) 799 9*) 97, 109 0*1
Di ba-ah ini dituliskan kode program dalam bahsa "as#al untuk metode shell sort.
Type /n#Tab ? re#ord
2um/n# $ % .. 2umElm
/n#rm $ array V %..numElmW o integer \
End\
"ro#edure (hell ( <ar ] $ ArrayType\ 2$integer\ /n#Tab) \
Xar j, span $ integer\
/n#r, y, k $ integer\
5ound $ boolean\
.egin
5or in#r $? % to /n#. 2um/2# do
.egin
Zspan adlah nilai in#rement yang #urrent[
span $ ? /n#./n#rm V in#rW\
or j $ ? spant@% to 2 do
begin
Zinsert elemen >>VjW ke posisinya yang tepat dalam subilenya[
y $ ? ]V j W\
k $? j F span\
ound $ ? alse\
-hile ( k Q ?%) and ( not ound ) do
i ( y S ]VkW) then
begin
>Vk@spanW $ ? ]VkW\
K $ ? k F spasi\
End
Else ound ound $ ? true \
]V k@spanW $ ? y$
End\
End\
End\
).?. 1T1&"AL 'O&T/"2
Metode F metode internal sorting yang diuraikan di atas tidak dapat diterapkan apabila
junlah item data yang akan diurutkan tidak dapat ditampung dalam memori utama komputer
( sehingga harus disimpan dalam media penyimpanan sekunder, seperti disk ). Dalam kasus
Halaman 66
Algoritma Pemrograman
seperti ini, data disimpan dalam bentik sebuah ile, dimana pada setiap saat hanya satu item
data yang dapat diakses. 8al ini menjadi suatu batasan jika dibandingkan terhadap struktur
array. Karena itu harus digunakan teknik sorting yang berbeda. (alah satu diantaranya yang
terpenting adalah sorting by merging.
).?.1. 31TOD1 'T&A/2,T 31&2/"2 'O&T
Merging ialah proses mengabungkan dua atau lebih ile yang terurut ke dalam ile ketiga
yang dapat diakses se#ara berulang F ulang. Merging merupakan sebuah operasi yang jauh
lebih sederhana dibandingkan sorting.
!ontoh sebuah prosedur yang menerima masukkan dua buah array terurut A dan . dengan
jumlah elemen data an dan bn, dan mengabungkan keduanya ke dalam array ketiga ! yang
akan berisi !n elemen data.
"ro#edure MergeArray ( A, . $ ArrayType\ Xar ! $ ArrayType\
An, bn $ integer\ Xar #n $ integer )\
Z MergeBgabungkan array A dan array . ke dalam array ! [
Xar Aid>, .id>, !id> $ integer\
.egin
/ ( an @ bn Q 2umElm ) then
Error ( D Data yang akan di&merge terlalu banyak D )\
Else begin
!n $? an @ bn\
Aid> $? %\ .id> $? %\ !id> $?%\
Chile ( Aid> S? an ) and ( .id> S@ bn ) do
begin
i ( AVAid>W S .Vid>W then
begin
!V!id>W $? AVAid>W\
Aid> $? Aid> @ %\
Endelse
.egin
!V!id>W $? .V.id>W\
.id> $? .id> @ %\
End\
!id> $? !id> @ %\
End\
Z (alin elemen data yang tersisa di array A dan . [
Chile ( Aid> S? an ) do
.egin
!V!id>W $? AVAid>W\
!id> $? !id> @ %\
Aid> $? Aid> @ %\
End\
Chile ( .id> S? bn ) do
.egin
!V!id>W $? .V.id>W\
!id> $? !id> @ %\
.id> $? .id> @ %\
End\
End\
End\
"ada prosedur di atas, dua buah array B tabel terurut digabungkan ke dalam sebuah array
yang baru. "eoses ini dilakukan dengan #ara memilih re#ord dengan nilai key paling ke#il
Halaman 67
Algoritma Pemrograman
dalam kedua array tersebut se#ara berulang &Fulang dan menempatkannya ke dalam array
yang baru. (ebuah #ontoh dengan , item deberikan berikut ini.
Array % %% ') +'
Array ' 0 ',
Array )
Array % %% ') +'
Array ' ',
Array ) 0
Array % ') +'
Array ' ',
Array ) C 11
Array % +'
Array ' ',
Array ) C 11 !%
Array % +'
Array '
Array ) C 11 !% !>
Array %
Array '
Array ) C 11 !% !> )!
Kita dapat menggunakan teknk ini untuk mengurutkan sebuah ile dengan #ara berikut.
"ertama, kita membagi ile yang akan diurutkan menjadi n buah subile yang hanya berisi %
data. Kemudian, pasangan subile yang bertetangga (ad&acent) digabungkan untuk
membentuk subile baru yang berukuran lebih besar. :adi, kita memperoleh kira&kira nB'
buah subile yang masing&masing berisi ' data. "roses ini diulangi hingga akhirnya
diperoleh % buah file yang berukuran n data. Tambar % menunjukkan bagaimana proses ini
dilaksanakan pada sebuah ile #ontoh. (etiap subile ditandai dengan kurung siku.
.erikut ini akan diberikan sebuah prosedur untuk mengimplementasikan teknik 'traight
3erge 'ort yang telah dijelaskan di atas. Dibutuhkan sebuah array bantu %ux berukuran
-um.lm untuk menyimpan hasil penggabungan dua buah subarray dari ]. Xariabel size
digunakan untuk mengontrol ukuran dari subarray yang sedang digabungkan. Karena kedua
ile yang sedang digabungkan merupakan subarray dari ], maka dibutuhkan batas ba-ah
(lo+er $ound) dan batas atas (upper $ound) untuk menunjukkan subile&subile dari ] yang
sedang diproses. 3.% dan 6.% merupakan batas ba-ah dan batas atas untuk ile pertama\
3.' dan 6.' merupakan batas ba-ah dan batas atas untuk ile kedua. Xariabel / dan j
digunakan untuk menga#u ke elemen data pada ile sumber (source file) yang sedang
diproses dan k menga#u ke ile tujuan (destination file). "rosedurnya dituliskan dengan
lengkap di ba-ah ini.
Halaman 68
Algoritma Pemrograman
"ro#edure Merge(ort (<ar ] $ ArrayType\ 2 $ integer)\
Xar Au> $ ArrayType\
3.%, 3.', 6.%, 6.' $ integer\
i, j, k, siIe $ integer\
.egin
siIe $? %\ Zmerge ile&ile berukuran % data[
-hile (siIe S 2) do
begin
Zinisialisasi batas ba-ah dari ile pertama[
3.% $? %\
k $? %\
-hile (3.% @ siIe S? 2) do
Z#ek apakah ada ' ile yang akan di&merge[
begin
3.' $? 3.% @ siIe\
6.% $? 3.' F %\
/ (3.' @ siIe F % Q 2)
Then 6.' $? 2
Else 6.' $? 3.' @ siIe F %\
End\
i $? 3.%\
j $? 3.'\
-hile (/ S? 6.%) and (j S? 6.') do
begin
i (]ViW S? ]VjW) then
begin
Au>VkW $? ]ViW\
i $? i @ %\
end else
begin
Au>VkW $? ]VjW\
j $? j @ %\
end\
k $? k @ %\
^ end\
-hile (i S? 6.%) do
begin
au>VkW $? ]ViW\
i $? i @ %\
k $? k @ %\
end\
-hile (j S? 6.') do
begin
au>VkW $? ]VjW\
j $? j @ %\
k $? k @ %\
end\
3.% $? 6.' @ %\
Zsalin isi ile&ile yang masih tersisa[
i $? 3.%\
-hile (k S? 2) do
begin
au>VkW $? ]ViW\
k $? k @ %\
i $? i @ %\
end\
or k $? % to 2 do ]VkW $? Au>VkW\
siIe $? siIe A '\
end\
end\
Halaman 69
Algoritma Pemrograman
Di ba-ah ini diberikan dua buah #ontoh proses straight merging untuk ile data berukuran 1
dan %*.
A-al V',W V,9W V+1W V)9W V%'W V0'W V17W V))W
"ass % V', ,9W V)9 +1W V%' 0'W V)) 17W
"ass ' V', )9 +1 ,9W V%' )) 17 0'W
"ass ) V%' ', )) )9 +1 ,9 17 0'W
A-al V+'W V')W V9+W V%%W V7,W V,1W V0+W V)7W V00W V19W
"ass % V') +'W V%% 9+W V,1 7,W V)7 0+W V19 00W
"ass ' V%% ') +' 9+W V)7 ,1 7, 0+W V19 00W
"ass ) V%% ') )7 +' ,1 7, 9+ 0+W V19 00W
"ass + V%% ') )7 +' ,1 7, 9+ 19 0+ 00W
Metode di atas disebut /-+ay merging. !ara ini dapat digeneralisasi untuk menggabungkan
k buah tabel terurut ke dalam satu array terurut. Teknik merging sedemikian disebut multiple
merging atau k-+ay merging.
Metode sorting ini #ukup eisien. Karena jumlah iterasi yang dibutuhkan adalah Vlog'nW maka
jumlah perbandingan yang dilakukan berorde =(n log' n). =rde ini berlaku untuk kasus
terburuk dan juga kasus rata&rata. (alah satu kelemahan utaman metode ini adalah area
data sekunder yang dibutuhkan #ukup besar. Merge sort membutuhkan tambahan spa#e
untuk array bantu sebesar =(n), sedangkan Yui#ksort hanya membutuhkan tambahan spa#e
sebesar =(log n) untuk sta#k.
(alah satu modiikasi yang dapat dilakukan terhadap metode di atas adalah dengan
menggunakan linked allocation untu menggantikan alokasi sekuensial. Dengan
menambahkan sebuah iled pointer tunggal ke dalam tiap re#ord, kebutuhan akan array
bantu %ux dapat ditiadakan. 8al ini dilakukan dengan menghubungkan se#ara eksplisit
setiap subile input dan output. Modiikasi ini dapat dilakukan baik terhadap straight merge
maupun natural merge.
).?.!. 3etode "atural 3erging 'ort
Dalam metode straight merging tidak diperoleh keuntungan apa&apa bila data pada a-alnya
telah terurut sebagian (partially sorted). 6kuran dari semua subile yang telah di&merge pada
iterasiBpass ke&k adalah kurang dari atau sama dengan '
k
, tanpa melihat apakah subile
lainnya telah terurut dan dapat digabungkan juga. "ada kenyataannya, dua buah subile
sebarang dengan panjang m dan n dapat digabungkan se#ara langsung ke dalam sebuah
ile tunggal dengan jumlah item m @ n. Metode mergesort yang pada setiap saat
menggabungkan dua buah subile terpanjang yang mungkin disebut natural merging sort.
:adi, jika pada straight merge,s emua subile berukuran sama (ke#uali mungkin untuk
subile terakhir), maka pada natural merge kita memanaatkan beberapa keterurutan yang
telah ada dalam ile a-al dan pemilahannya dilakukan berdasarkan subile terpanjang
dengan urutan data yang menaik (increasing). Dengan kata lain, kita memanaatkan derajat
keterurutan yang ada dalam array a-al untuk melakukan /-+ay merge sort. Di ba-ah ini
diberikan dua buah #ontoh proses natural merging untuk %* item dan '* item.
Halaman 70
Algoritma Pemrograman
A-al V9*W V%* %9 9,W V+'W V),W V'0 ,) 7,W V+1W
"ass % V%* %9 9* 9,W V), +'W V'0 +1 ,) 7,W
"ass ' V%* %9 ), +' 9* 9,W V'0 +1 ,) 7,W
"ass ) %* %9 '0 ), +' +1 ,) 7, 9* 9,
Kondisi a-al $
V%9 )%W V, ,0W V%) +% +) 79W V%% ') '0 +9W
V) 9 9%W V' %0 ,9W V)9 7%W
"ass % $
V, %9 )% ,0W V%% %) ') '0 +% +) +9 79W
V' ) 9 %0 ,9 9%W V)9 7%W
"ass ' $
V, %% %) %9 ') '0 )% +% +) +9 ,0 79W
V' ) 9 %0 )9 ,9 7% 9%W
"ass ) $
V' ) , 9 %% %) %9 %0 ') '0 )% )9
+% +) +9 ,9 ,0 7% 79 9%W
"enjelasan mengenai dua algoritma sorting $y merging lainnya, yaitu Balanced 3ultiwa$
3erging dan Pol$phase 'ort, dapat dilihat pada VC/;97W.
).@. K1'/3P#LA"
VC/;97W memberikan hasil perbandingan perormansi dari beberapa metode sorting dalam
bentuk tabel F tabel berikut. "ada tabel ', n adalah jumlah data, ! menunjukan jumlah
perbandingan ( #omparison ), dan M menunjukan jumah pertukaran jumlah pertukaran
( mo<e ).
Tabel '. "erbandingan metode F metode sorting sederhana
METODE MINIMUM RATA - RATA MAKSIMUM
Sta!"#t $%&#an"$
( b'bb($ )*t )
+ = ( n2 , n ) / 2
M = 0
+ = ( n2 , n ) / 2
M = ( n2 , n ) % 0,75
+ = ( n2 , n ) / 2
M = ( n2 , n ) % 1,5
Sta!"#t )$($&t!*n + = ( n2 , n ) / 2
M = 3 ( n , 1 )
+ = ( n2 , n ) / 2
M = n ( 1n n + 0,75 )
+ = ( n2 , n ) / 2
M = n2 / - + 3 ( n , 1 )
Sta!"#t !n)$t!*n + = n , 1
M = 2 ( n , 1 )
+ = ( n2 + n , 2 ) / -
M = ( n2 , .n , 10 / -
+ = ( n2 , n ) / 2 , 1
M = ( n2 + 3n , - ) / 2
Tabel ) di ba-ah ini menunjukan -aktu yang dibutuhkan ( dalam milise#ond ) oleh program
sorting dalam bahasa pas#al yang dieksekusi pada komputer !D! 7+**. Ketiga kolom
tersebut menunjukan -aktu yang digunakan untuk mengurutkan array yang telah terurut,
array yang urutannya a#ak, dan array yang terurut terbalik. (isi kiri kolom adalah -aktu
untuk mengurutkan '+7 item, sedangkan sisi kanan adalah untuk ,%' item.
Tabel ). "erbandingan -aktu eksekusi dari metode F metode sorting
METODE T$''t
( */$$/ )
A&a0
( an/*1 )
T$''t t$ba(!0
( !n2$)$(3 */ )
Sta!"#t !n)$t!*n 12 23 344 1--- 70- 2534
Sta!"#t )$($&t!*n -53 1.07 50. 1.54 4.5 2475
6'bb($ )*t 5-0 2145 1024 -05- 1-.2 5.31
S#a0$ )*t 5 . .41 34-2 141. 4520
S#$(( )*t 55 114 127 3-. 157 -.2
7$a8 )*t 114 253 110 2-1 10- 224
9'!&0 )*t 31 4. 40 1-4 37 7.
Sta!"#t 1$"!n" .. 23- 102 2-2 .. 232
Halaman 71
Algoritma Pemrograman
Dari tabel di atas terlihat bah-a $
i. Metode bubble sort merupakan metode sorting paling terburuk dinamdingkan
metode F metode lainnya. Metode shaker sort, yang merupakan <ersi perbaikannya,
masih lebih buiruk dibandingkan straight insertion dan straighty sele#tion sort.
ii. Metode Yui#k sort mengnguguli metode heap sort dengan aktor ' F ). Rui#k sort
mengurutkan array yang terburuk terbalik denan ke#epatan yang sama dengan array
terurut.
"ada tabel ) di atas, metode sorting mengurutkan re#ord yang hanya terdiri dari sebuah key
saja. "ada kebnyataanya, sebuah re#ord memiliki banak ield yang lain. Tabel + berikut
menunjukan bagaimana pengaruh pemanbahan ield ke dalam re#ord terhadap perormansi
-aktu metode sorting. Total ukuran re#ord tanpa ield tambahan, sedangkan sisi kanan
kolom untuk re#ord dengan ield tambahan\ jumlah daya n ? ',7
Tabel +. "erbandingan -aktu eksekusi dari metode F metode sorting
6ntuk re#ord dengan ield tambahan
METODE T$'t
( */$$/ )
A&a0
( an/*1 )
T$''t t$ba(!0
( !n2$)$(3 */. )
Sta!"#t !n)$t!*n 12 -4 344 112. 70- 2150
Sta!"#t )$($&t!*n -5. 5-7 50. 407 4.5 1-30
6'bb($ )*t 5-0 410 1024 3212 1-.2 55..
S#a0$ )*t 5 5 .41 3071 141. 5757
S#$(( )*t 55 154 127 373 157 -35
7$a8 )*t 114 24- 110 2-4 10- 227
9'!&0 )*t 31 55 40 137 37 75
Sta!"#t 1$"!n" .. 1.4 102 1.5 .. 157
Kesimpulan dari hasil perbandingan metode&metode sorting diatas adalah sebagai berikut $
i. Metode straight selestion sort menunjukan keunggulan yang signiikan sebagai
metode sederhana ( straight method ) yang terbaik.
ii. Metode bubble sort merupakan metode terburuk. Xersi perbaikan F nya, yaitu
metode shaker soer hanya sedkiti lebih baik dibandingkan bubble sort dalam kasus
array terurut terbalik ( in<ersely ordered ).
iii. Metode Yui#k sort metode yang ter#epat dan metode internal sorting yang terbaik.
.aik straight sele#tion sort maupun simple insertion sort lebih sesien dibandingkan bubble
sort. (ele#tion sort membutuhkan lebih sedikit assigment dibandingkan insertion sort,
namun lebih banyak perbandinan. Karena itu, sele#tion sort direkomendasikan untuk ile F
ile berukuran ke#il dengan ukuran re#ord besar ( assigment mahal, tetapi perbandingan
murah karena key sederhana ). 6ntuk kasus sebaliknya, direkomendasikan insertion sort.
Halaman 72
BAB VI
Algoritma Pemrograman
'1A&-,/"2 < Pencarian =
"en#arian Data yang sering juga disebut dengan table look-u" atau
storage and retrie/al information adalah suatu proses
untuk mengumpulkan sejumlah inormasi di dalam memori
komputer dan kemudian men#ari kembali inormasi yang
diperlukan se#epat mungkin.
(eringkali kita dihadapkan pada permasalahan dimana
sebenarnya kita memerlukan sedikit inormasi dari sekian
banyak inormasi yang tersedia, sehingga sering timbul
pemikiran untuk menghapus inormasi yang tidak diperlukan.
2amun dikemudian hari kita berubah pikiran untuk mempertahankan
inormasi tersebut. Dan mengorganisasikannya sehingga proses pen#arian dapat dilakukan
dengan #epat dan tepat.
?.1. /stilah $ang digunakan
(e#ara umum kita memakai anggapan sejumlah data yang tersimpan dalam memori
komputer, dan persoalan yang timbul adalah men#ari data yang kita inginkan. Dalam setiap
rekaman ( reord ) biasanya terdiri dari medan ( field ). 6ntuk membedakan satu re#ord
dengan re#ord yang lain maka harus ada satu ield yang menjadi kun#i ( ke0 field ).
Kumpulan dari re#ord yang kita miliki dinamakan dengan berkas ( file ) atau tabel.
8ubungan antara key ield dengan re#ord biasanya sederhana atau kompleks. .entuk
paling sederhana dari sebuah key ield adalah yang terletak dalam re#ord tersebut. Key ini
biasanya dinamakan internal ke0 atau embedded ke0. Key yang lain ada yang tersimpan
di dalam tabel di luar dari tabel utama. Key ini biasanya dinamakan dengan e1ternal ke0.
:ika dalam sebuah re#ord terdapat ield yang dapat membedakan re#ord tersebut se#ara
unique ( berbeda untuk setiap re#ordnya ) maka iled tersebut dinamakan "rimar0 ke0.
(edangkan ield yang membantu membedakan setiap re#ord ( tidak dapat berdiri sendiri )
maka ield tersebut sering dinamakan seondar0 ke0. .eberapa kun#i ada yang disajikan
se#ara single ke0, dan beberapa yang lain disajikan se#ara multi"le ke0.
Algoritma "en#arian ( !earhing Algorithm ) adalah algoritma yang menerima kun#i
bernilai K dan dengan langkah&langkah tertentu akan men#ari re#ord yang kun#inya bernilai
K. (etelah proses dijalankan, kemungkinan ja-abannya hanya ada dua yaitu berhasil
ditemukan ( suesful ) dan tidak berhasil ditemukan ( unsuesful ). "en#arian yang
berhasil menemukan sering dinamakan retrie/al.
6ntuk algoritma pen#arian dan menambahkan data, dinamakan dengan searh and
insertion algorithm. Metoda pen#arian data dapat dikelompokan kedalam beberapa
Halaman 73
Algoritma Pemrograman
metoda. Kelompok metoda pertama dapat dikelompokan menjadi pencarian internal (
internal searhing ) dan pencarian eksternal (e1ternal searhing).
"engelompokan kedua adalah dengan mengelompokan ke dalam pencarian statis ( stati
searhing ) dan pencarian dinamis ( d0nami searhing ). !ara pengelompokan yang
lain adalah berdasarkan kun#i yang ada atau berdasar siat digital ( digital "ro"erties ) dari
kun#i yang dimaksud. Menggunakan perbandingan dan distribusi.
?.!. Pencarian Berurutan < sequential searhing =
?.!.1. Pencarian Pada Tabel $ang belum Diurutkan
Metode yang paling sederhana dari sejumlah metode pen#arian adalah metoda pen#arian
berurutan ( sequential searhing ). (e#ara garis besar metoda ini dapat dijelaskan sbb$
Dari Xektor yang di#ari, data yang di#ari dibandingkan satu persatu sampai data tersebut
ditemukan atau tidak ditemukan. "ada saat data ditemukan maka proses pen#arian
langsung berhenti. Dalam kondisi yang paling buruk proses ini melakukan pen#arian
sebanyak 2 kali ( sejumlah data yang ada).
Procedure -A&/:#&#T( Xar Ada $ boolean\ 2,"osisi $ integer\
A $ Array\ Data $ integer)\
Kamus Lokal
/ $ integer\
Algortima 7
(Adianggap tidak ada dataA)
Ada $? 5alse\
(Aiterasi dimulaiA)
+or / 7H 1 to " do
/( AV/W ? data then
(AData ketemuA)
Begin
"osisi $? /\
Ada $? True\
1nd
1nd(or
Ada ? alse
/( not Ada then
(AData yang di#ari tidak ketemu sisipkan elemen ke dalam <ektorA)
Begin
/nc(2)
AV2W $? Data\
1nd
?.!.!. Pencarian Pada Tabel $ang 'udah Diurutkan
(e#ara singkat pen#arian pada tabel yang sudah diurutkan adalah $
Dari elemen pertama dibandingkan dengan elemen yang di#ari. :ika elemen yang
dibandingkan lebih ke#il dari elemen yang di #ari maka diteruskan pada elemen selanjutnya.
:ika elemen yang dibandingkan lebih besar, maka dapat dipastikan elemen yang di#ari tidak
dapat ditemukan. :ika ditemukan, maka proses pen#arian selesai.
Halaman 74
Algoritma Pemrograman
?.!.!. Pencarian Biner * Binar$ 'earch
(etelah <ektor yang di#ari diurutkan, maka <ektor tersebut dibagi dua sub <ektor dengan
jumlah data yang sama (:ika ganjil maka diambil dari hasil 2 di< '). Kemudian data yang
di#ari dibandingkan dengan elemen data yang terakhir dari data sub <ektor yang pertama.
Apabila data yang di#ari lebih besar dari elemen akhir dalam sub <ektor sebelah kiri, maka
data yang di#ari kemungkinan ada pada sub <ektor sebelah kanan.
:ika data yang di#ari lebih ke#il dari elemen akhir dalam sub <ektor sebelah kiri , maka data
yang di#ari kemungkinan ada pada sub <ektor sebelah kiri. "roses selanjutnya adalah
kembali ke a-al dengan menganggap sub <ektor yang diperkirakan berisi data yang di#ari
dianggap <ektor yang akan dibagi dua. 6ntuk lebih jelasnya perhatikan gambar di ba-ah ini
Xektor di atas dibagi menjadi dua sub <ektor seperti di ba-ah ini $
(ub <ektor % (ub Xektor '
Misalnya data yang di#ari adalah %', maka data ada pada sub <ektor%. (etelah itu
kemudian sub <ektor% dibagi menjadi ' bagian seperti di ba-ah ini $
(ub <ektor % (ub Xektor '
Karena data yang di#ari ada pada (ub Xektor', maka data ada pada sub <ektor' kemudian
dibagi menjadi ' bagian kembali seperti di ba-ah ini $
(ub <ektor % (ub Xektor '
Karena data yang di#ari ada pada (ub Xektor% dan sudah sama, maka prose pen#arian
selesai.
?.!.%. Pencarian Berurutan BerindeA * /ndeA 'e5uential 'earch
Metoda pen#arian berurutan terindeks (inde>ed seYuential sear#h) adalah metoda lain dari
beberapa metoda pen#arian yang dapat menaikan eisiensi pen#arian pada tabel yang
sudah dalam keadaan urut. Dalam hal ini diperlukan tabel tambahan yang disebut dengan
tabel inde>. (etiap elemen dalam tabel inde> berisi suatu kun#i dan pointer yang menunjuk
kerekaman tertentu dalam tabel yang sesuai dengan kun#i tersebut. Elemen&elemen dalam
tabel inde> juga harus diurutkan seperti halnya dalam tabel yang asli.
Halaman 75
2 % 12 3& 43 '% &2 && %2 (4
2 % 12 3& 43 '% &2 && %2 (4
2 % 12 3& 43
12 3& 43
Algoritma Pemrograman
(alah satu #ara untuk menyusun tabel inde> adalah sebagai berikut. Di ba-ah ini adalah
suatu tabel yang menunjukan tabel datar mahasis-a dari suatu uni<ersitas yang sudah
diurutkan menurut nomor mahasis-anya.
No No. Mhs Nama Mahasiswa Thn Faklutas
1. .51001 An/! U)1an A(!1 .5 K*18't$ A0'ntan)!
2. .51102 6a1ban" A:! .5 T$0n!0 In;*1at!0a
3. .51110 E0* <a1b'/! .5 T$0n!0 In;*1at!0a
-. .41201 A#1a/ T!t* S'/!* .4 Mana:$1$n In;*1at!0a
5. .41003 N3a! Ant$# 6'(an .4 K*18't$ A0'ntan)!
4. .41101 D$=! In/a Uta1a .4 T$0n!0 In;*1at!0a
7. .41105 M$t(at! <'t!# .4 T$0n!0 In;*1at!0a
5. .41207 >a/a <a(' .4 Mana:$1$n In;*1at!0a
.. .7120- Ka1!n* 6a(! .7 Mana:$1$n In;*1at!0a
10. .7121- >ata0 Ab/'(a#1an .7 Mana:$1$n In;*1at!0a
11. .7120- D*$( M')(!1!n .7 Mana:$1$n In;*1at!0a
12. .5100. +#!)t3 Man')a1a .5 K*18't$ A0'ntan)!
13. .51113 U:an" M')a(!1 .5 T$0n!0 In;*1at!0a
1-. .51114 D!1a) A/! >!nata .5 T$0n!0 In;*1at!0a
15. .51223 R. A/! 7$n/a N!n"'1 .5 K*18't$ A0'ntan)!
Dari gambar diatas, jika kita melihat pada nomor mahasis-a, kita bisa mendapatkan
inormasi yang tersembunyi. Dua digit paling depan menunjukan tahun angkatan seorang
mahasis-a masuk ke uni<ersitas\ dua digit ditengah menunjukkan kode akultas, %* adalah
Komputer Akuntansi, %% adalah Teknik /normatika dan %' adalah Manajemen /normatika.
Dua digit terakhir menunjukan nomor urutnya.
Dengan melihat gambar di atas, kita bisa
menyimpan tabel di atas untuk
diimplementasikan menggunakan suatu
struktur data tertentu untuk mendukung
pen#arian berurutan terinde> dengan
beberapa #ara. !ara pertama adalah dengan
menggunakan tahun angkatan sebagai kun#i.
!ara kedua menggunakan kode akultas untuk
kun#inya. Tambar di ba-ah ini , menunjukan penyimpanan tabel
di atas dengan tahun angkatan sebagai kun#i.
Halaman 76
Algoritma Pemrograman
Tabel Data
"o.
3hs
"ama 3ahasiswa +aklutas
%**% Andi 6sman Alim Komputer Akuntansi
%%*' .ambang Aji Teknik /normatika
%%%* Eko "ambudi Teknik /normatika
%'*% Ahmad Tirto (udiro Manajemen /normatika
%**) 2yai Anteh .ulan Komputer Akuntansi
%%*% De-i /ndra 6tama Teknik /normatika
%%*, Metlati "utih Teknik /normatika
%'*9 Carda "alu Manajemen /normatika
%'*+ Kamino .ali Manajemen /normatika
%'%+ Catak Abdulrahman Manajemen /normatika
%'*+ Doel Muslimin Manajemen /normatika
%**0 !hristy Manusama Komputer Akuntansi
%%%) 6jang Mursalim Teknik /normatika
%%%7 Dimas Adi Cinata Teknik /normatika
%'') ;r. Adi 8endra 2ingrum Komputer Akuntansi
(etiap elemen dalam tabel inde> terdiri dari dua buah medan, medan pertama menunjukan
tahun angkatan yang dimaksud, medan kedua berisi pointer yang menunjukan ke tabel data
yang rekaman pertamanya berisi sambungan dari nomor mahasis-a yang tahunnya
dinyatakan dalam medan pertama. (ebagai #ontoh, rekaman pertama dalam tabel inde>,
pointernya bernilai %\ hal ini menunjukan bah-a % adalah nomor rekaman pertama dalam
tabel data yang tahun angkatannya adalah 0,. Dalam rekaman kedua dari tabel inde>,
pointernya bernilai +\ hal ini menunjukan bah-a + adalah nomor rekaman pertama dalam
tabel data yang tahun angkatannya adalah 07, dan seterusnya.
Dengan #ara ini bisa dihitung mahasis-a yang masuk pada uni<ersitas tersebut setiap
angkatannya. (ebagai #ontoh, banyaknya mahasis-a yang masuk pada tahun 0, adalah
sebanyak pointer tahun 07 dikurangi dengan pointer tahun 0,, yaitu sebanyak ) mahasis-a
(+&%). 6ntuk mengetahui banyaknya mahasis-a yang masuk pada tahun 09 diperlukan data
sentinel, yang nilai pointernya apabila dikurangi dengan nilai pointer pada tahun 09 adalah
tepat. Dalam #ontoh di atas, elemen terakhir dari tabel inde> berisi data sentinel yang
dimaksud.
"rogram yang akan disajikan di ba-ah ini merupakan #ontoh pembentukan berkas
berurutan berinde> berdasarkan tahun angkatan. Dalam program tersebut, tipe data untuk
tabel inde> dan berkas yang dimaksud dibuat berbeda (karena memang biasanya berbeda).
Deklarasi tipe data untuk tabel inde> dan tabel data yang berisi data mahasis-a adalah
sebagai berikut$
Type Z A Elemen tabel inde> A [
/nde> ? re#ord
Kun#i $ string V'W\
A-al $ integer
end\
Z A Elemen data A [
Halaman 77
Tabel /nde>
(5
('
(&
(%
1
4
(
12
1'
Algoritma Pemrograman
Data ? re#ord
2oUMhs $ string V+W\
2ama, 5akultas $ string V'*W\
end\
Z A Tabel /nde> A [
3i ? array V*..%*%W o /nde>\
Z A Tabel data A [
3d ? array V%..%**W o Data\
Dalam deklarasi di atas, ukuran tabel inde> dibuat seperti pada #ontoh diatas, untuk
menyediakan tempat bagi data sentinel yang diperlukan. Data yang akan di#oba,
sebelumnya sudah disimpan dalam berkas teks yang diberi nama !=.ADATA.DAT.
(e#ara singkat program di ba-ah ini bisa dijelaskan sebagai berikut. (etelah data diba#a
dari berkas !=.ADATA.DAT (yang sudah dalam keadaan urut), dibentuk tabel inde> seperti
dijelaskan diatas. :ika kita ingin men#ari suatu nomor mahasis-a, terlebih dahulu nomor
mahasis-a tersebut dipe#ah menjadi dua untai, yaitu untai nomor urut mahasis-a.
"en#arian dimulai dengan men#ari tahun angkatan pada tabel inde>. :ika ditemukan,
selanjutnya diteruskan dengan men#ari data yang dimaksud pada tabel data. :ika tahun
angkatan yang di#ari tidak ditemukan, pen#arian langsung dihentikan dan tidak perlu
men#ari pada tabel data, karena dalam tabel data yang terbentuk sesungguhnya
merupakan sambungan dari tabel inde>. 6ntuk pen#arian pada tabel inde> dan tabel data
dilakukan dengan #ara pen#arian berurutan.
Keuntungan yang segera bisa dilihat dari metode ini adalah bah-a pen#arian dapat
diper#epat karena jika inde> yang di#ari tidak ditemukan, maka berarti data yang akan di#ari
memang tidak ada dalam tabel data. Tetapi jika inde>nya ditemukan, maka hanya sebagian
ke#il dari tabel data yang perlu kita #ari . 8al ini tentu akan meper#epat pen#arian dibanding
harus men#ari pada keseluruhan tabel data.
"emakaian inde> juga bisa diimplementasikan menggunakan senaraiB link list seperti halnya
dengan penggunanaan larikBarray. Meskipun diperlukan ruang pengingat yang lebih banyak
untuk pointer, tetapi yang melakukan penghapusan atau penyisipan akan lebih mudah
dilaksanakan dibanding denga larikBarray.
:ika tabel data yang digunakan #ukup besar sehingga meskipun sudah digunakan tabel
berurutan terinde> eisiensi pen#arian yang diinginkan tidak bisa di#apai (mungkin karena
inde>nya terlalu besar untuk mengurangi pen#arian berurutan, atau karena inde>nya
tertentu ke#il sehingga kun#i&kun#i yang berdekatan #ukup jauh satu sama lain) seringkali
digunakan inde> sekunder. /nde> sekunder ini juga berungsi sama dengan inde> primer.
"enghapusan elemen dari tabel berurutan terinde> akan lebih mudah apabila digunakan
suatu tanda khusus (lag) yang menunjukan bah-a suatu elemen sudah dihapus. Dalam
pen#arian berurutan rekaman yang sudah diberi tanda akan diabaikan. "erhatian, bah-a
Halaman 78
Algoritma Pemrograman
jika ada suatu elemen dihapus, maka tabel inde> didiamkan saja, tetapi pada tabel data kita
tambahkan tanda khusus pada elemen yang akan dihapus.
"enyisipan elemen ke dalam tabel berurutan terinde> akan mengalami kesukaran jika tidak
ada tempat yang tersedia baik pada tabel inde> ataupun pada tabel data. Kalaupun ada,
juga harus melakukan penggeseran sejumlah elemen yang banyaknya tidak menentu.
Tentu, jika ada elemen yang sudah ditandai untuk dihapus, mungkin hanya diperlukan
sedikit penggeseran sebelum elemen yang sudah ditandai tersebut ditumpang tulisi oleh
elemen yang baru.
6ntuk implementasi menggunakan senarai berantaiB link list, penulis setahkan pada
pemba#a sekalian untuk men#obanya.
Halaman 79
",
".
"P
Tabel Data
"Q
$$
$,
$.
$R
$S
,"
,-
,.
,S
-"
",
$$
$,
I%de( Sek&%der
$.
$S
,-
-"
$,
$S
,-
I%de( Prier
BAB VII
Algoritma Pemrograman
+/L1 '1D#1"T/AL < A&'/P B1&#"T#" =
Memori utama dalam komputer tidak menyimpan data se#ara permanen. Apa yang
tersimpan dalam memori akan hilang pada saat komputer dimatikan. Agar dat dapat di olah
dikemudian hari, maka diperlukan memori yang dapat menyimpan data sehingga dapat
diolah dikemudian hari. Memori ini dinamakan dengan meori sekunder ( se#ondary storage).
Media yang sudah dikenal untuk digunakan biasanya adalah Disk ( disket, 8arddisk,
#ompa#t disk ) dan tape.
Memori sekunder dapat menyimpan data dalam jumlah yang sangat besar. (elain itu,
memori sekunder biasanya meyimpan data dalam bentuk arsip ( (ile). /normasi yang
disimpan dalam ile dinamakan rekaman (record). Metode penyimpanan dan pengaksesan
ile bergantung pada metode pengorganisasian yang digunakannya. .eberapa metode
organisasi ile antara lain arsip beruntun ( se5uential (ile ), arsip a#ak ( random (ile ), arsip
berindeks ( indeAed (ile ).
@.1. De(inisi Arsip Beruntun
Arsip beruntun adalah sekumpulan rekaman yang disimpan di dalam media penyimpanan
sekunder komputer yang dapat diakses se#ara berururtan mulai dari rekaman pertama
sampai dengan rekaman yang terakhir se#ara berarah satu persatu.
Karena komputer tidak mengetahui akhir dari arsip, maka dibuatkan sebuah rekaman (ikti(
yang berungsi sebagai tanda akhir dari sebuah arsip. .iasanya dinamakan sebagai 1nd O(
+ile ( 1O+).
6rutan akses ( satu per satu )
HHHHHH. End = 5ile
;ekaman % ;ekaman '
E=5
@.!. Deklarasi Arsip Beruntun
!ara mendeklarsikan arsip dalam KAM6( adalah seperti di ba-ah ini $
KA3#'
Type ;ekaman $ re#ord S deklarasi nama ield dan tipenya Q
Type Arsipberuntun $ seY5ile o ;ekaman and E=5 ? Srekaman iktiQ
Halaman 80
Algoritma Pemrograman
!ontoh penggunaan arsip beruntun $
KA3#'
Type DataMhs $ re#ord S 2/M $ ineteger, 2ama $ string, /"K $real Q
Type Arsipberuntun $ seY5ile o DataMhs and E=5 ? S0000,G.G,*.**Q
M8( $ ArsipMhs Z 2ama Arsip Mahasis-a [
KA3#'
Type .il.ulat $ integer
Type Arsip.il $ seY5ile o .il.ulat and E=5 ? S0000Q
./3A2TA2 $ Arsip.il Z 2ama Arsip .ilangan .ulat[
Di ba-ah ini adalah ilustrasi dat dari deklarasi data di atas $
00+*%') !itra !araka ',+,
00+*')' MaE;u Manangsang ),97
00+*)%' ;ithamanubun ',01
00+*+'1 Karo (iahaya ),+)
0000000 *.**
a
),, )+ 177 +,,7 +) &+, 9,7 )+,+ 0000
b
@.%. Perintah Dasar untuk Arsip Beruntun
(etiap rekaman dapat diakses sesuai dengan urutannya dengan perintah pemanggilan
akses yang ada. "erintah dasar untuk pengelolaan arsip beruntun adalah perintah primiti
( berupa ungsi dan prosedur )yang telah dosediakan oleh compiller.
.eberapa perintah dasar yang digunakan untuk mengelola arsip beruntun adalah seperti di
ba-ah ini $
1. Open
5ungsi $ membuka arsip beruntun untuk siap diba#a. "ointer pemba#aan menunjuk
ke rekaman pertama.
Keterangan $ perangkat keras yang berungsi penting dalam operasi ba#a B tulis rekaman
adalah ,ead. "osisi a-al rekaman yang ditunjuk oleh head ditunjukan
dengan pointer.
!ontoh $ ="E2(M8(,;ekMhs) Z M8( ? nama arsip, ;ekMhs bertipe DataMhs [
="E2(./3A2TA2,/) Z ./3A2TA2 ? nama arsip, / bertipe .il.ulat [
.ila arsip yang dibuka berisi rekaman seperti pada ilustrasi data di atas, maka perintah open
di atas akan menjadi $
Halaman 81
Algoritma Pemrograman
;ekMhs berisi S00+*%'),!itra !araka,',+,Q
/ berisi ),,
!. &ead
5ungsi $ memba#a rekaman yang sekarang sedang ditunjuk oleh pointer
pemba#aan.
!ontoh $ ;EAD(M8(,;ekMhs)
;EAD (./3A2TA2,/)
.ila pointer pemba#aan menunjuk pada a-al rekaman kedua dengan data seperti pada
ilustrasi di atas, maka perintah read di atas akan menjadi $
;ekMhs berisi S00+*''),MaEru Manangsang,),97Q
/ berisi )+
%. &ewrite
5ungsi $ menyiapkan arsip untuk perekaman
!ontoh $ ;EC;/TE(M8()
;EC;/TE (./3A2TA2)
). ;rite
5ungsi $ Menulis rekaman ke dalam arsip
!ontoh $ C;/TE(M8(, S00+*%'),!itra !araka,',+,Q)
C;/TE (./3A2TA2,S1***)
!atatan $ Arsip yang dibuka untuk pemba#aan ( dengan perintah ="E2 ) tidak dapat
digunakan untuk perekaman. Demikian juga sebaliknya, arsip yang dibuka untuk perekaman
( dengan perintah ;EC;/TE ) tidak dapat diba#a. =perasi ba#a tulis tidak dapat dilakukan
sekaligus pada arsip beruntun.
>. -lose
5ungsi $ menutup arsip yang telah digunakan untuk pemba#aan ataupun perekaman.
!ontoh $ !3=(E(M8()
!3=(E (./3A2TA2)
@.). 'kema Pemroses Beruntun untuk Arsip Beruntun
Karena seluruh rekaman di dalam arsip tersusun se#ara beruntun, maka skema
pemrosesan se#ara beruntun dapat diterapkan dalam pengelolaan arsip.
!ontoh$
"ro#edure 8/"K( output 2atas' $ integer )
Z Menghitung jumlah mahasis-a yang /"K nya di atas ', data diba#a dari arsip M8( [
Kamus 3okal
;ekM8( $ DataMhs
A3T=;/TMA
="E2(M8(, ;ekM8() Z ;ekM8( berisi rekaman pertama atau E=5 [
Halaman 82
Algoritma Pemrograman
/5 ;ekM8( ? =E5 then Z Arsip kosong [
2atas' *
else
2atas' *
;epeat
/ ;ekM8(./"K Q '.* then
2atas' 2atas' @ %
Endi
;EAD(M8(, ;ekM8() Z ba#a rekaman selanjutnya[
6ntil ;ekM8( ? E=5
Endi
!3=(E(M8()
@.).1.Pemrosesan Teks
Teks adalah arsip yang terdiri atas deretan karakter. 6ntaian karakter tersebut dapat
membentuk kata. Pang dimaksud dengan kata adalah kelompok karakter yang dipisahkan
dengan kelompok lain oleh satu atau lebih spasi.
"ada implementasinya, ditambahkan end of line sebagai tanda dari akhir baris yang
membedakan dengan baris lainnya.
Dalam meninjau model pengaksesan beruntun pada teks, pandanglah sebuah teks disusun
oleh baris&baris teks. Andaiakan baris&baris teks tersebut dapat dipotong dan kemudian
masing&masing ujung dari baris teks tersebut disambungkan, maka akhirnya didapatkan
sebuah "/TAG yang berisi karakter&karakter.
!ontoh
:ika suatu Teks dideinisikan dalam bagian DEK3A;A(/ menjadi seperti $
"emrosesan teks yang utama adalah pemba#aan. "emrosesan teks adalah "emba#aan
karakter se#ara beruntun dari a-al hingga akhir. Akhir teks ditandai dengan karakter khusus
( karakter titik (.G)) yang dibedakan dengan karakter lainnya. .ila pemba#aan bertemu
dengan karakter khusus tersebut, maka pemba#aan berhenti. Karakter khusus ini tidak
dihitung sebagai unsur teks.
Teks yang terdiri dari ') karakter. Akhir teks adalah D.E
Teks kosong
Halaman 83
Saya adala* 2a*asis4a ST2IK 2ardira I%do%esia J&r&sa% I%0oratika ya%8 seda%8 bela?ar Al8orita TTT@@
DKKJARASI
P E te(t ; P adala* Dariable Teks <
ST2IK-2ardira I%do%esia@
@
Algoritma Pemrograman
Dideinisikan ;E(ETUTEK( adalah prosedur uni<ersal untuk teks. ;E(ETUTEK(
menyebabkan pointer akan menunjuk pada karakter pertama di teks. :ika teks kososng,
pointer menunjuk titik. Pointer adalah identiikasi yang menunjuk pada karakter yang akan
diba#a.
2otasi yang digunakan untuk memba#a karakter dari teks " adalah $
!ontoh Kasus $
Halaman 84
Pro3ed&re RKSKTGTKKS
B2e%yiapka% Teks pada posisi a4al C
B K@A4al E Sebara%8 C
B K@Ak*ir E poi%ter e%&%?&k pada karakter pertaa di dala teks
akibat pea%88ila% prosed&r i%iA poi%ter e%&%?&k ke karakter pertaa teksA
karakter ya%8 dit&%?&k &%8ki% @C
DKKJARASI
C E 3*ar ; karakter ya%8 seda%8 di t&%?&k ole* poi%ter ba3a C
P E te(t ; P adala* Dariable Teks <
DKSKRIPSI
Read ;PAC< B 2eba3a karakter ya%8 dit&%?&k ole* poi%ter ba3a dari teks P@ Karakter ya%8 diba3a
disipa% dala pe&ba* C@ C
Pro3ed&re FITUNIGBAN1AKGKARAKTKR ;+&tp&t E % E i%ete8er <
B2e%8*it&%8 ba%yak%ya karakter di dala teksC
B K@A4al E Sebara%8 C
B K@Ak*ir E % berisi ba%yak%ya karakter di dala teksC
DKKJARASI
; Tidak ada <
DKSKRIPSI
N "
RKSKTGTKKS
Read ;PAC<
/*ile C @ Do
% % ' $
Read ;PAC< B ba3a karakter berik&t%ya <
e%d4*ile
Pro3ed&re FITUNIGBAN1AKGKATA ;+&tp&t E %kata E i%ete8er <
B2e%8*it&%8 ba%yak%ya kata di dala teksC
B K@A4al E %kata bel& terde0i%isi %ilai%ya C
B K@Ak*ir E %kata berisi ba%yak%ya kata di dala teksC
DKKJARASI
Pro3ed&re ABAIKANGSPASI
B 2eba3a dereta% spasi da% e%8abaika%%yaC
DKSKRIPSI
RKSKTGTKKS
Read ;PAC<
%kata "
/*ile C @ Do
ABAIKANGSPASI
B ba3a ter&s pita selaa bel& spasi ata& bel& titik C
/*ile ; C < a%d ; C @ < Do
Read ;PAC<
K%d4*ile
; C < or ; C @ < Do
%kata %kata ' $
ABAIKANGSPASI
e%d4*ile
Pro3ed&re ABAIKANGSPASI
B2eba3a dereta% spasi da% e%8abaika%%yaC
B K@A4al E Sebara%8 C
B K@Ak*ir E karakter b&ka% spasi dite&ka%C
DKKJARASI
; Tidak ada <
DKSKRIPSI
BSelaa ada spasi da% bel& titikA ba3a ter&s karakter di teks C
/*ile ;C @< a%d ;C < Do
Read ;PAC< B ba3a karakter berik&t%ya <
K%d4*ile
C @ or C
Algoritma Pemrograman
@.>. Penggabungan Arsip
"engganbunagn arsip ( merging ) dilakukan untuk menggabungkan rekaman yang disimpan
di dalam dua buah arsip berbeda. 8asil penggabungan arsip disimpan dalam arsip baru.
@.>.1. Penggabungan Dua Buah Arsip dengan Pen$ambungan
Misalkan diberikan dua buah arsip bilangan bulat, arsip yang pertama diberi nama
./3A2TA2% dan arsip yang kedua diberi nama ./3A2TA2'. /lustrasinya seperti di ba-ah
ini $
./3A2TA2%
+), ,77 &+,7 1,7 1791 000
./3A2TA2'
799 )+ 79 000
Apabila kedua arsip tersebut digabungkan dan hasilnya disimpan dalam arsip ./3A2TA2),
ilustrasi hasilnya adalah seperti di ba-ah ini $
./3A2TA2)
+), ,77 &+,7 1,7 1791 799 )+ 79 000
Algoritmanya adalah seperti di ba-ah ini $
KAM6(
Type .il.ulat $ integer
Type Arsip.il $ (eY5ile o .il.ulat and E=5 ? S000Q
./3A2TA2%, ./3A2TA2', ./3A2TA2) $ Arsip.il Z nama arsip [
"ro#edure "enyambunganarsip%
Z Menggabungkan dua buah arsip dan hasilnya disimpan dalam arsip baru [
Kamus 3okal
/ $ .il.ulat
A3T=;/TMA
;EC;/TE(./3A2TA2))
="E2(./3A2TA2%, / )
Chile ( / SQ 000 ) do
C;/TE(./3A2TA2), / )
;EAD(./3A2TA2%, / )
End-hile
Z / ? 000 [
Z (ambung ./3A2TA2) dengan rekaman di ./3A2TA2' [
Chile ( / SQ 000 ) do
C;/TE(./3A2TA2), / )
;EAD(./3A2TA2', / )
End-hile
Halaman 85
Algoritma Pemrograman
Z / ? 000 [
C;/TE(./3A2TA2), S000Q)
!3=(E(./3A2TA2%)
!3=(E(./3A2TA2')
!3=(E(./3A2TA2))
@.>.!. Penggabungan Dua Buah Arsip Terurut
Misalkan arsip "ertama dan arsip Kedua sudah terururt naik dan diinginkan arsip hasil
penggabungan juga terurut naik.
!ontoh $
./3A2TA2%
+) ,7 ,0 1, 01 000
./3A2TA2'
%7 )+ 79 000
Apabila kedua arsip tersebut digabungkan dan hasilnya disimpan dalam arsip ./3A2TA2),
ilustrasi hasilnya adalah seperti di ba-ah ini $
./3A2TA2)
%7 )+ +) 77 ,0 99 1, 01 000
Algoritmanya adalah seperti di ba-ah ini $
KAM6(
Type .il.ulat $ integer
Type Arsip.il $ (eY5ile o .il.ulat and E=5 ? S000Q
./3A2TA2%, ./3A2TA2', ./3A2TA2) $ Arsip.il Z nama arsip [
"ro#edure "enyambunganarsip'
Z Menggabungkan dua buah arsip yang sudah terurt dan hasilnya disimpan dalam arsip baru
yang juga sudah terurut [
Kamus 3okal
Angka%, Angka' $ .il.ulat
A3T=;/TMA
="E2(./3A2TA2%, Angka%)
="E2(./3A2TA2', Angka')
;EC;/TE(./3A2TA2))
Chile ( Angka%SQ 000 ) and ( Angka%SQ 000 ) do
/ Angka% Angka' then
C;/TE(./3A2TA2), Angka% )
;EAD(./3A2TA2%, Angka% ) Z Arsip ./3A2TA2% maju satu rekaman [
Else
C;/TE(./3A2TA2), Angka' )
;EAD(./3A2TA2%, Angka' ) Z Arsip ./3A2TA2' maju satu rekaman [
Endi
Halaman 86
BAB VIII
Algoritma Pemrograman
End-hile
Z Angka% ? 000 or Angka' ? 000[
Z (alin rekaman yang tersisa dari arsip ./3A2TA2% dan ./3A2TA2' [
Chile ( Angka% SQ 000 ) do
C;/TE(./3A2TA2), Angka% )
;EAD(./3A2TA2%, Angka% )
End-hile
Z Angka% ? 000 [
Chile ( Angka' SQ 000 ) do
C;/TE(./3A2TA2), Angka' )
;EAD(./3A2TA2', Angka' )
End-hile
Z Angka% ? 000 [
C;/TE(./3A2TA2), S000Q)
!3=(E(./3A2TA2%)
!3=(E(./3A2TA2')
!3=(E(./3A2TA2))
@.?. Pemutakhiran Arsip < #pdating =
"emutakhiran ( 6pdating ) adalah proses yang dilakukan untuk mengubah atau
meremajakan rekaman arsip induk ( master ile ). "eremajaan rekaman arsip dapat
dilakukan dengan data rekaman yang baru di inputkan atau diba#a dari arsip transaksi.
AL2O&/T3A DA" P13&O2&A33A" T1&'T&#KT#&
Konsep pemrogramman terstruktur memegang peran penting dalam meran#ang, menyusun,
memelihara dan mengembangkan suatu program. Khususnya program aplikasi yang besar
dan kompleks.
Konsep ini diungkapkan pertama kali oleh "ro. Edsger Djikstra dari 6ni<ersitas Eindho<en
pada tahun %07*&an. "ro. Edsger Djiktra mengungkapkan bahaya dari penggunaan
instruksi lon#atan pada program dalam segala bentuk pemrogramman. =leh karena itu
mulailah dikembangkan teknik pemrogramman terstruktur.
B.1. /stilah Dasar
(ebelum mempelajari pemrogramman terstruktur lebih lanjut ada beberapa istilah dasar
yang perlu dipahami terlebih dahulu.
Halaman 87
Algoritma Pemrograman
a. Program
"rogram adalah kata, ekspresi, pernyataan atau kombinasi yang disusun dan dirangkai
menjadi satu kesatuan prosedur yang berupa urutan langkah untuk menyelesaikan masalah
yang diimplementasikan dengan mengunakan bahasa pemrogramman tertentu sehingga
dapat dieksekusi oleh komputer.
b. Bahasa Pemrogramman
.ahasa "emrogramman adalah prosedur B tata #ara penulisan program. "ada bahasa
pemrogramman terdapat dua aktor penting, yaitu synta> dan semantik. (ynta> adalah
aturan&aturan gramatikal yang mengatur tata #ara penulisan kata, ekspresi dan pernyataan,
sedangkan semantik adalah aturan&aturan untuk menyatakan suatu arti.
c. Pemrogramman
"emrogramman adalah proses mengimplementasikan urutan langkah untuk menyelesaikan
suatu masalah dengan menggunakan suatu bahasa pemrogramman.
d. Pemrogramman Terstruktur
"emrogramman Terstruktur merupakan proses mengimplementasikan urutan langkah untuk
meyelesaikan masalah dalam bentuk program yang memiliki ran#ang bangun yang
terstruktur dan tidak berbelit&belit sehingga mudah ditelusuri, dipahami dan dikembangkan
oleh siapa saja.
B.!. -iri Teknik Pemrogramman Terstruktur
Teknik pemrogramman terstruktur memiliki #iri&#iri atau karakteristik sbb $
a. mengandung teknik peme#ahan masalah yang tepat dan benar
b. memiliki algoritma peme#ahan masalah yang bersiat sederhana, standar dan eekti
dalam meme#ahkan masalah
#. teknik penulisan program memiliki struktur logika yang benar dan mudah dipahami
d. program semata&mata terdiri dari tiga struktur dasar $ seYuen#e stru#ture, sele#tion
stru#ture dan 3ooping (tru#ture.
e. menghindari penggunaan instruksi peralihan tanpa syarat tertentu yang menjadikan
program tidak terstruktur dengan baik.
. Membutuhkan biaya testing yang rendah
g. Memiliki dokumentasi yang baik
h. Membutuhkan biaya pera-atan dan pengembangan yang rendah
B.%. 'tandar Program $ang baik
(tandar pemrogramman dibutuhkan untuk men#iptakan suatu program yang baik dan
memiliki portabilitas yang tinggi sehingga memudahkan dalam meran#ang dan mera-at
Halaman 88
Algoritma Pemrograman
program serta meningkatkan eektiitas penggunaan peralatan komputer. 6ntuk menentukan
standar program yang baik diperlukan beberapa standar sebagai dasar penilaian, seperti $
a) peme#ahan masalah
b) penyusunan program
#) pera-atan program
d) standar prosedur
(tandar&standar tersebut sering dilihat oleh programmer sebagai batasan kreatitas dan
kemampuan untuk menuangkan berbagai ide ke dalam bentuk program. 2amun dengan
adanya standar, bagaimanapun juga akan membuat program menjadi konsisten dan mudah
untuk dikembangkan.
B.%.1. 'tandar Teknik Pemecahan 3asalah
(etelah masalahnya dipahami dengan baik, programmer tentu membutuhkan suatu teknik
untuk meme#ahkan masalah tersebut, antara lain dikenal !eknik !op 0o+n dan !eknik
Bottom Up.
Teknik Top Down merupakan teknik peme#ahan masalah yang paling umum digunakan.
"ada teknik ini suatu masalah yang rumit dibagi&bagi ke dalam beberapa kelompok maslah
yang lebih ke#il. Dari kelompok masalah yang ke#il tersebut dianalisis. Apabila
memungkinkan, maka masalah tersebut dipilah lagi ke dalam bagian yang lebih ke#il lagi
sampai tidak dapat dipilah lagi. (etelah pemilahan tersebut dilakukan sampai bagian yang
terke#il, baru kemudian disusun langkah&langkah untuk menyelesaikannya se#ara detail.
Teknik Bottom #p merupakan peme#ahan masalah yang mulai ditinggalkan dikarenakan
susah untuk membuat standarisasi proses dari prosedur&prosedur yang sudah terbentuk
yang akan digabungkan. Dalam teknik ini, jika ada permasalahan yang rumit, maka
peme#ahan masalahnya dilakukan dengan menggabungkan prosedur&prosedur yang ada
menjadi satu kesatuan program guna menyelesaikan maslaah tersebut.
"roses dari masalah hingga terbentuk suatu algoritma disebut tahap pemecahan masalah,
sedangkan tahap dari algoritma hingga terbentuk suatu solusi disebut dengan tahap
implementasi.
B.%.!. 'tandar Pen$usunan Program
Dalam menyusun program ada beberapa kriteria yang harus diperhatikan oleh programmer.
a. Kebenaran Logika dan Penulisan
"rogram yang ditulis harus mempunyai kebenaran logika peme#ahan masakah maupun
penulisan. "rogram harus mempunyai ketepatan, ketelitian dan kebenaran dalam
perhitungan sehingga hasilnya dapat diper#aya.
b. ;aktu 3inimum #ntuk Penulisan Program
Caktu minimum penulisan program adalah -aktu yang harus tersedia se#ara -ajar
untuk menyusun program.
Halaman 89
Algoritma Pemrograman
c. Kecepatan 3aksimum 1ksekusi Program
.eberapa aktor yang mempengaruhi ke#epatan eksekusi program anatara lain bahasa
yang digunakan, algoritma yang disusun, teknik pemrogramman yang diterapkan dan
perangkat keras yang digunakan.
d. 1kspresi Penggunaan 3emor$
(eorang programmer perlu mempelajari teknik pembuatan program yang dapat
meminimumkan penggunaan memori. "emborosan penggunaan memori akan
memperlambat ke#epatan eksekusi program.
6ntuk dapat meminimumkan penggunaan memori, maka perlu diperhatikan $
- "enggunaan tipe data yang #o#ok untuk kebutuhan pemrogramman.
- Menghindari looping untuk <ariable berindeks
e. Kemudahan 3erawat dan mengembangkan Program
"rogram hendaknya memiliki struktur pemrogramman yang baik, struktur data yang jelas
dan dilengkapi dengan dokumentasi sehingga mudah untuk dipahami dan
dikembangkan.
(. #ser +riendl$
"rogram yang disusun harus memiliki asilitas&asilitas yang memberikan kemudahan&
kemudahan kepada user untuk mengoperasikannya.
g. Portabilit$
"rogram yang disusun dapat dipakai dalam sistem operasi dan perangkat keras apa
saja, sehingga leksibel.
h. Pemrogramman 3odular
"rogram terdiri dari modul&modul yang diusahakan tidak saling bergantungan satu sama
lain. 2amun demikian setelah dibangun dalam suatu sistem maka modul&modul tersebut
menjadi satu kesatuan yang terintegrasi.
B.%.%. 'tandar Perawatan Program
Dalam menyusun suatu program, programmer harus mempertahankan aktor yang
memudahkan dalam mera-at dan mengembangkan program. 5aktor tersebut antara lain $
a. Dokumentasi
Dokumentasi merupakan #atatan dari setiap langkah pembuatan program dari a-al
sapai akhir. Dokumentasi berguna untuk menelusuri kesalahan jika ada ataupun untuk
mengembangkannya.
b. Penulisan Program
Agar memudahkan proses pera-atan program, maka sebaiknya penulisan program
adalah sbb $
& Tulis satu instruksi dalam satu baris
& "emisahan Modul "rogram dengan beberapa spasi
& .edakan "enulisan /nstruksi program, <ariable atau huru ke#il
Halaman 90
Algoritma Pemrograman
& .edakan tabulasi untuk bagian yang termasuk dalam bagian looping
& 8indari penggunaan kostanta yang mempunyai kemungkinan akan berubah
& .atasi jumlah baris dalam satu mosul
B.). 3enulis Program
"rogrammer adalah orang yang bekerja menyusun program. 6ntuk menghasilkan program
yang baik diperlukan programmer yang baik dan berkualitas pula. Adapun kriteria
programmer yang baik adalah $
a) mampu menyusun peme#ahan masalah dengan baik
b) menguasai bahasa pemrogramman dengan baik
#) mampu menulis program dengan teknik pemrogramman yang baik
d) mampu menyusun program dengan baik
e) dapat bekerja sama dalam suatu tim
) dapat bekerja se#ara eisien dan tepat -aktu.
Pustaka
Munir ;inaldi. /r., 3idya 3eoni. /r., Algoritma dan "emrogramman .uku %, /normatika
/T., .andung, %009
E. 8oro-itI and (. (ahni, 5undamentals o !omputers Algorithms, !omputer (#ien#e
"ress, %091
Cirth 2iklaus, Algoritma + (truktur Data = "rogram, Andi, Pogyakarta, %009
"ranata Antony, Algoritma dan "emrogramman, :_: 3earning, Pogyakarta, '**'
Halaman 91

Anda mungkin juga menyukai