Sorting Dan Searching

57
PUTU RUSDI ARIAWAN PRAKTIKUM KOMSEP PEMROGRAMAN KOMPUTER MODUL IV SORTING DAN SEARCHING Oleh KELOMPOK XVIII Putu Rusdi Ariawan (0804405050) I Gusti Agung Gede Mega Perbawa (0804405049) LABORATORIUM KOMPUTER JURUSAN TEKNIK ELEKTRO FAKULTAS TEKNIK UNIVERSITAS UDAYANA Desember 2008

description

Sorting Dan Searching

Transcript of Sorting Dan Searching

Page 1: Sorting Dan Searching

PUTU RUSDI ARIAWAN

PRAKTIKUM KOMSEP PEMROGRAMAN KOMPUTER

MODUL IV

SORTING DAN SEARCHING

Oleh

KELOMPOK XVIII

Putu Rusdi Ariawan (0804405050)

I Gusti Agung Gede Mega Perbawa (0804405049)

LABORATORIUM KOMPUTER

JURUSAN TEKNIK ELEKTRO

FAKULTAS TEKNIK UNIVERSITAS UDAYANA

Desember 2008

Page 2: Sorting Dan Searching

PUTU RUSDI ARIAWAN

BAB VI

SORTING DAN SEARCHING

6.1 Tujuan

Adapun tujuan dari praktikum “Sorting dan Searching” ini adalah

sebagai berikut :

1. Memahami dasar-dasar pemrograman Pascal atau C++.

2. Memperdalam kemampuan terhadap penggunaan tipe data array dalam

program.

3. Mengenal dan bisa menggunakan fungsi pembangkit bilangan acak yang ada

dlaam bahasa Pascal atau C++.

4. Mengenal dan bisa memakai fungsi untuk mendapatkan waktu dalam Pascal

atau C++.

5. Memahami tujuan dan mekanisme pengurutan data dan pencarian data, baik

yang bersifat numerik maupun alphanumerik.

6. Mampu menganalisis unjuk kerja masing-masing metode pengurutan dan

pencarian, sehingga bisa memilih metode pengurutan data dan pencarian data

yang terbaik untuk suatu contoh kasus tertentu.

6.2 Tinjauan Pustaka

Untuk mendukung membangkitkan bilangan acak, Turbo Pascal

menyediakan :Pernyataan Random, Fungsi Randomize, Variabel Randseed

Random berguna untuk memperoleh sebuah bilangan acakRandomize

berguna untuk memberikan nilai awal buat pembangkitan bilangan acak

berdasarkan jam sistem. Dengan menggunakan prosedur ini akan diperoleh

bilangan acak yang benar-benar acak untuk setiap waktu. Sedangkan untuk

memperoleh bilangan acak yang setiap saat dijalankan akan memberikan nilai

sama dapat diatur dengan variabel RandSeed.

Contoh yang menujukkan pemakian Random, Rondomize dan RandSeed

dapat dilihat dalam program berikut ini.

Page 3: Sorting Dan Searching

PUTU RUSDI ARIAWAN

6.2.1 Bilangan Random

Cara membangkitkan bilangan acak dapat dilakukan dengan pernyataan

randomize, fungsi random dan vaiabel randseed. Fungsi random berguna untuk

memperoleh bilangan random (acak). Sedangkan untuk pemberian nilai awal

pembangkitan bilangan random digunakan pernyataan randomize atau variabel

Randseed. Pernyataan randomize digunakan untuk pemberian nilai awal

berdasarkan jam sistem atau bisa juga disebut pemberian nilai awal juga secara

random. Sedangkan bila kita ingin memberikan atau menetapkan nilai awal untuk

pembangkitan itu sendiri dapat menggunakan variabel randseed. Bedanya jika

nilai awal dibangkitkan dengan pernyataan randomize nilai awal yang kita

dapatkan akan benar-benar acak,namun bila dengan variabel randseed apabila

nilai variabel randseed tersebut tidak berubah maka setiap dipanggil fungsi

random akan mengeluarkan bilangan yang sama. Berikut adalah masing-masing

contoh pembangkitan nilai awal secara random:

A. Dengan Pernyataan Randomize

Kode Program 6.1 Pernyataan randomize

Penggunaan fungsi randomize dalam program berguna untuk

membangkitkan bilangan acak.Setiap program dijalankan maka angka yang

muncul akan selalu berbeda (angka yang muncul tidak selalu sama setiap

fungsi random-nya dipanggil).

program random_1;

uses

wincrt;

var

x:byte;

begin

clrscr;

randomize; {pernyataan randomize}

for x:=1 to 5 do

writeln(random);

readln;

donewincrt;

end.

Page 4: Sorting Dan Searching

PUTU RUSDI ARIAWAN

B. Dengan Var Rand Seed

Kode Program 6.2 Pernyataan randomize dengan randseed.

Sedangkan dengan variabel randseed maka jika nilai variabel

randseed tersebut tidak berubah maka setiap dipanggil fungsi random akan

mengeluarkan bilangan yang sama.

6.2.2 Sorting

Sorting adalah proses meletakkan kumpulan elemen data dalam urutan

tertentu berdasarkan satu atau beberapa kunci dari tiap elemen.. setelah tersusun

sebagai sebuah list, seluruh data dapat dibandingkan satu dengan yang lain.Secara

umum pengurutan dibagi menjadi dua :

1) Ascending : Pengurutan data di mana nilai awal lebih kecil dari nilai

setelahnya. (Urut Naik).

2) Descending : Pengurutan data di mana nilai awal bernilai lebih besar

dari nilai berikutnya. (Urut Turun).

Data berada dalam kondisi urut naik jika data pada urutan lebih awal

mempunyai harga yang lebih kecil daripada data pada urutan berikutnya.

Sebaliknya, data disebut urut turun jika harga data pada urutan awal lebih besar

daripada data pada urutan berikutnya.

program random_2;

uses

wincrt;

var

x:byte;

begin

clrscr;

randseed:=5; {pemberian nilai awal}

for x:=1 to 5 do

writeln(random);

readln;

donewincrt;

end.

Page 5: Sorting Dan Searching

PUTU RUSDI ARIAWAN

6.2.2.1 Insertion Sort

Proses pengurutan data dengan cara mengecek data satu persatu mulai

dari yang kedua sampai dengan yang terakhir. Apabila ditemukan nilai data yang

lebih kecil dari yang sebelumnya, maka data tersebut disisipkan pada posisi yang

sesuai. Insertion Sort ada dua macam yaitu :

1. Straight Insertion (metode penyisipan langsung).

Secara umum proses pengurutan data dengan metoda penyisipan

langsung adalah kebalikan dari metoda seleksi langsung. Pengurutan data dengan

metoda penyisipan langsung dimulai dengan membandingkan harga data pada

urutan kedua terhadap data pada urutan pertama. Jika data kedua lebih besar maka

data kedua ditukarkan posisinya dengan data pertama. Pada langkah berikutnnya

data ketiga dibandingkan dengan data kedua, jika data ketiga lebih besar, maka

data ketiga ditukarkan posisinya dengan data kedua, kemudian data tersebut

dibandingkan dengan data pertama, tukarkan posisi kedua data jika data ketiga

lebih besar.demikian seterusnya terhadap data berikutnya. Dalam metoda ini,

proses membandingkan harga data baru (data yang sedang diproses) terhadap

data-data lain yang telah diurut akan dihentikan jika data tersebut telah menempati

posisi yang semestinya sehingga data-data yang telah diproses telah urut.Contoh :

Diketahui sebuah larik data yang terdiri dari 5 elemen data dalam

kondisi tidak urut yaitu :

5 2 3 1 4

Setiap data baru yang sedang diproses akan selalu disisipkan secara

langsung dan menempati posisi baru sesuai dengan harganya, sehingga pada

setiap akhir langkah tertentu semua data yang telah diproses akan selalu berada

dalam kondisi urut ( ditunjukkan oleh tabel dibawah ini ).

Tabel 6.1 Tabel stright insertion.

Intersi Ke Hasil Proses

0 5 2 3 1 4

1 2 5 3 1 4

2 2 3 5 1 4

Page 6: Sorting Dan Searching

PUTU RUSDI ARIAWAN

3 1 2 3 5 4

4 1 2 3 4 5

Hasil akhir yang diperoleh dari proses diatas adalah sekumpulan data

dalam kondisi urut naik, yaitu sebagai berikut :

1 2 3 4 5

2. Binary Insertion (metode penyisipan biner).

Metoda penyisipan biner (binary insertion) merupakan usaha perbaikan

dari metoda penyisipan langsung. Dalam cacah data yang banyak, pengurutan data

dengan metode penyisipan biner akan lebih efisein.

Secara garis besar, proses pengurutan data dengan metoda ini terdiri dari

dua bagian utama, yaitu proses penentuan elemen-elemen data yang akan diproses

dan proses penyisipan elemen data untuk mengurutkan data-data. Proses

penentuan data yang akan diproses adalah sama dengan cara-cara dalam metoda

penyisipan langsung, tetapi dalam metode penyisipan biner penentuan lokasi dan

penyisipan dilakukan dengan cara biner.

Mula-mula data pertama dalam larik sumber dianggap telah menempati

tempat yang tepat pada larik hasil. Kemudian data yang mendapat giliran diproses

akan disisipkan kedalam larik hasil, yaitu data kedua,ketiga hingga data terakhir.

Untuk menentukan lokasi penyisipan dengan cara biner adalah dilakukan dengan

cara sebagai berikut. Mula-mula kita tetapkan harga batas bawah dan batas atas

interval untuk larik hasil. Harga awal batas bawah untuk tiap interasi adalah 1.

Sedangkan harga awal batas atas pada setiap iterasi adalah sama dengan cacah

data pada larik hasil.

Jika data-data akan diurutkan secara naik, maka data-data pada bagian

pertama yaitu bagian yang berada disebelah kiri akan memuat data-data urut yang

lebih kecil dari harga pada titik tengah interval. Sedangkan bagian yang berada di

sebelah kanan titik tengah interval akan memuat data-data yang lebih besar. Jika

semua data dalam larik sumber tidak ada yang sama,maka langkah ini akan

mengakibatkan dua kemungkinan kondisi, yaitu data yang disisipkan akan lebih

kecil atau lebih besar dari harga data pada posisi tengah interval. Jika lebih kecil

Page 7: Sorting Dan Searching

PUTU RUSDI ARIAWAN

maka penyisipan harus dilakukan pada bagian pertama yaitu interval sebelah kiri.

Namun jika data yang disisipkan lebih besar maka penyisipan harus dilakukan

pada bagian kedua. Pada langkah selanjutnya interval dimana data akan disisipkan

dibagi kembali menjadi dua bagian yang sama dengan menetapkan titik tengah

pada interva yang baru.Kemudian proses perbandingan dan penentuan interval-

interval baru dilakukan kembali. Demikian seterusnya proses dilaksanakan hingga

ditemukan posisi yang tepat bagi data yang akan disisipkan, yaitu jika titik tengah

interval sama dengan batas bawah dan batas atas interval. Selanjutnya jika posisi

penyisipan telah ditemuakn, maka proses dilanjutkan untuk menggeser data-data

mulai dari posisi dimana data akan disisipkan hingga data terakhir pada larik hasil,

setelah selesai baru dilakukan penyisipan, yaitu dengan cara menempatkan data

yang disisipkan pada posisi yang telah ditemukan. Dengan demikian data telah

selesai diproses dan data telah urut.Contoh :

Diketahui vektor K yang mempunyai delapan elemen data, yaitu

sebagai berikut :

10 5 7 9 2 1 8 4

langkah dan hasil proses pengurutan pada setiap iterasi ditunjukkan pada tabel di

bawah :

Tabel 6.2 Tabel binary insertion.

Itersi ke Hasil Proses

0 10 5 7 9 2 1 8 6

1 5 10 7 9 2 1 8 6

2 5 7 10 9 2 1 8 6

3 5 7 9 10 2 1 8 6

4 2 5 7 9 10 1 8 6

5 1 2 5 7 9 10 8 6

6 1 2 5 7 8 9 10 6

7 1 2 5 6 7 8 9 10

Hasil akhir yang diperoleh dari proses diatas adalah sekumpulan data

dalam kondisi urut naik, yaitu sebagai berikut :

1 2 4 5 7 8 9 10.

Page 8: Sorting Dan Searching

PUTU RUSDI ARIAWAN

6.2.2.2 Shell Sort

Nama metode Shell diambil dari nama pembuatnya yakni D.L. Shell,

tahun 1959. Metode Shell sering juga disebut sebagai metode pertambahan

menurun. Metode ini mengururtkan suatu data dengan cara membandingkan suatu

data dengan data lain yang memiliki jarak tertentu, kemudian dilakukan

penukaran bila perlu.

Proses pengurutannya dapat dijelaskan sebagai berikut: pertama adalah

menentukan jarak mula-mula dari data yang akan dibandingkan, yaitu N / 2.

Setelah itu, dilakukan pengulangan dari satu sampai dengan N / 2. Pada masing-

masing pengulangan dilakukan pembandingan antara data ke-j dengan data ke-(j +

N / 2). Apabila data ke-j lebih besar dari data ke-(j + N / 2) maka kedua data

tersebut ditukar. Pengulangan dari 1 sampai n / 2 ini dilakukan sampai semua data

ke-j lebih kecil daripada data ke-(j + N / 2).

Pada proses berikutnya digunakan jarak(N / 2) / 2 atau N / 4. Kemudian

dilakukan perulangan dari 1 sampai dengan (N – N / 4) atau 3.N / 4. Pada masing-

masing perulangan dilakukan pembandingan antara data ke-j dengan data ke-(j +

N / 4). Apabila diperlukan kedua data itu ditukar. Pengulangan dari 1 sampai 3.N /

4 ini dilakukan sampai semua data ke-j lebih kecil dari data ke-(j + N / 4).Pada

proses berikutnya digunakan jarak (N / 4) / 2 atau N / 8. Demikian seterusnya

hingga jarak yang digunakan adalah 1.

Dalam metoda shell sort tidak ada ketentuan baku tentang seberapa jauh

jarak yang harus ditetapkan pada saat pertama kali untuk perbandingan antar data

yang kemudian akan dipersempit pada langkah-langkah selanjutnya.Adapun

contoh dari metode shell sort adalah seperti berikut :

Diketahui sebuah vektor yaitu K yang mempunyai delapan elemen data dalam

kondisi acak, yaitu sebagai berikut :

90 15 95 30 35 100 12 25.

Jika jarak untuk melakukan perbandingan pada langkah pertama adalah

N – 1 atau sama dengan 7, maka jarak perbandingan pada langkah kedua adalah 6,

ketiga adalah 5, dan terus dikurangi, hingga akhir sama dengan 1.

Page 9: Sorting Dan Searching

PUTU RUSDI ARIAWAN

Tabel 6.3 Tabel shell sort.

Interasi

ke

Jarak Hasil Proses

0 - 90 15 95 30 35 100 12 25

1 7 25 15 95 30 35 100 12 90

2 6 12 15 95 30 35 100 25 90

3 5 12 15 90 30 35 100 25 95

4 4 12 15 25 30 35 100 90 95

5 3 12 15 25 30 35 100 90 100

6 2 12 15 25 30 35 95 90 100

7 1 12 15 25 30 35 95 90 100

6.2.2.3 Bubble Sort

Untuk menghasilkan data yang urut naik, jika dibandingkan dengan

metoda seleksi langsung maka metoda gelembung memiliki perbedaan dalam

menemukan elemen data terkecil dan cara pertukaran datanya.Langkah pertama

pengurutan data secara urut naik dengan metoda gelembung adalah

membandingkan harga data pertama dengan data kedua.

Jika harga data pertama lebih besar maka tukarkan posisinya dengan data

kedua. Kemudian data kedua dibandingkan dengan data ketiga, tukarkan data

kedua jika data kedua lebih besar dari data ketiga, selanjutnya data ketiga

dibandingkan dengan data keempat, tukarkan jika data ketiga lebih besar dari data

keempat.

Proses ini akan diulang secara terus-menerus hingga semua data selesai

dibandingkan. Hasil pada langkah pertama adalah menempatkan data terbesar

pada urutan terakhir. Langkah kedua mengalami hal yang serupa dengan langkah

kedua.Jika K menyatakan cacah proses membandingkan yang harus dilakukan

untuk mengurutkan semua data dengan metoda gelembung, maka cacah

perbandingan tersebut dapat dihitung dengan formula:

2

2 NNK

dimana:

K : cacah proses perbandingan

N : cacah data

Page 10: Sorting Dan Searching

PUTU RUSDI ARIAWAN

6.2.2.4 Merge Sort

Langkah-langkah pengurutan dengan merge sort secara garis besar dapat

dijelaskan sebagai berikut. Andaikan terdapat vektor K dengan cacah elemen data

sebanyak N dalam kondisi tidak urut. Untuk mengurutkan semua data dalam K,

mula-mula setiap elemen dalam vektor K dianggap sebagai sebuah vektor yang

masing-masing mempunyai sebuah elemen data. Dengan demikian akan terdapat

N vektor dengan cacah elemen masing-masing adalah 1 buah. Selanjutnya setiap

pasang vektor yang berurutan kita gabungkan menjadi 1 vektor baru. Pada akhir

langkah pertama ini, kita akan memiliki vektor baru sebanyak N/2 yang masing-

masing dalam kondisi urut naik. Cacah elemen pada masing-masing vektor adalah

2 buah, kecuali jika N berniali ganjil, maka akan terdapat N/2-1 vektor baru

dimana salah satu vektor hanya memiliki sebuah elemen saja. Pada langkah

selanjutnya, setiap pasang vektor yang berurutan dilakukan penggabungan dan

sekaligus dapat pertukaran posisi antar data sehingga akan terbentuk vektor-vektor

baru. Demikian proses penggabungan dan pertukaran posisi data secara terus

menerus akan dilakukan hingga pada akhirnya akan diperoleh sebuah vektor baru

yang memuat semua elemen data dalam vektor sumber dalam kondisi urut naik.

Contoh :

Asumsikan kita memiliki array A yang berisi enam buah elemen data,

seperti tampak dibawah ini.

25 22 18 20 15 19

A[1] A[2] A[3] A[4] A[5] A[6]

Langkah A[1] A[2] A[3] A[4] A[5] A[6]

1 25 22 18 20 15 19

2 22 25 18 15 20 19

3 18 22 25 15 19 20

Langkah A[1] A[2] A[3] A[4] A[5] A[6]

4 15 18 19 20 22 25

Page 11: Sorting Dan Searching

PUTU RUSDI ARIAWAN

Hasil akhir yang diperoleh dari proses diatas adalah sekumpulan data dalam

kondisi urut naik, yaitu sebagai berikut :

15 18 19 20 22 25

A[1] A[2] A[3] A[4] A[5] A[6]

6.2.2.5 Quick Sort

Algoritma Quick sort yang terkenal itu ditemukan oleh C.A.R Hoare

pada tahun 1960, dan kerjanya lebih cepat. Cara ini didasarkan pada pendekatan

“bagi dan pecahkan”: untuk memecahkan masalah besar dengan membagi-

baginya ke dalam sub problem yang lebih kecil dan pecahkan tiap sub problem

dengan cara yang sama sampai cukup kecil untuk dipecahkan.Bagaimana kita

memecahkan masalah penyortiran ini menjadi sub problem yang dapat disusun?

Lihat daftar berikut:

Harga 32 dalam posisi 6 memiliki kegunaan khusus. Semua harga di sisi

kirinya kurang dari 32, sementara harga di kanan lebih besar dari 32. 32 disebut

tidak memihak pada penyortiran dalam dua sub problem: sub problem kiri dan sub

problem kanan. Masing-masing dapat disortir terpisah karena tidak ada harga

dalam subproblem kirai yang dapat sampai kekanan dan sebaliknya. Malahan

harga 32 berada diposisi yang sangat tepat yaitu dikanan sub problem – ada nilai

terendah disitu.

Mungkin anda pikir 32 tepat membagi daftar. Bagusnya algoritma

memberikan daftar apa saja, kita selalu dapat membuat bagian dengan harga

paling kiri tanpa banyak kesulitan.Lihat pengaturan ulang daftar:

Number :19 14 28 8 32 72 41 87

Position :1 3 4 5 6 7 8 9

32 19 41 14 28 8 72 30 87 33

L L1 R1 R

Page 12: Sorting Dan Searching

PUTU RUSDI ARIAWAN

Data yang terakhir ditandai dengan L dan R. kita dapat membagi daftar

dengan harga 32 pada posisi L, L1 dan R1 dinyatakan dengan harga awal seperti

yang ditunjukkan.

Sekarang bagaimana memindahkan L1 ke kanan sambil memastikan

bahwa tiap nilai di kiri L1 nilai pembatas. Dan kemudian memidahkan R1 ke

kiri sambil memastikan bahwa tiap nilai di kanan R1 > nilai pembatas.Dengan

mengerjakan langkah tersebut kita mendapatkan:

Sekarang apa? Seperti buntu. Tapi tidak demikian, tukar saja harga pada L1 (41)

dengan harga pada R1 (30):

Sekarang kita dapat melanjutkan menggerakkan L1 dan R1 seperti aturan di atas,

sampai tampil:

Tapi sekarang situasinya berbeda. L1 dan R1 berpinadah tempat, jadi kita harus

menemukan titik pembaginya: yaitu posisi R1. sekarang yang harus dilakukan

adalah menghilangkan harga L (32) dan R1 (8), kita akan mendapatkan array

pembagi, yaitu 32:

Sekarang kita dapat membagi masalah apa saja dengan harga paling kiri.

Jadi sub problem dapat dibagi dengan cara sama. Kita hanya melanjutkkan

32 19 41 14 28 8 72 30 87 33

L L1 R1 L1

32 19 30 14 28 8 72 41 87 33

L L1 R1 R

32 19 30 14 28 8 72 41 87 33

L R1 L1 R

8 19 30 14 28 32 72 41 87 33

L R1 L1 R

Page 13: Sorting Dan Searching

PUTU RUSDI ARIAWAN

pembagian sub problem sampai hanya memiliki satu anggota yang harus

disortir.Coba juga quick sort pada 1000 angka. Anda akan terkejut! Telah terbukti

bahwa quick sort memerlukan kira-kira N log2 N perbandingan sebagai lawan

bubble sort N2/2.Ouick sort akan semakin lambat bila daftar telah hampir

tersimpan (cobalah pada data yang telah tersortir). Tetapi akan bekerja cepat

apabila memilih harga saat mendekati sub problem untuk harga tengah, bukan

harga kiri.

6.2.3 Searching

Searching merupakan proses pencarian data dari sekumpulan data.

Prosedur pencarian selalu memiliki dua input, yaitu target dan list tempat record

yang akan dicari. Outputnya adalah variabel Boolean. Apabila record yang dicari

dapat ditemukan, maka outputnya adalah sebuah pointer atau petunjuk yang

menunjukkan lokasi record tersebut.

6.2.3.1 Sequential Search

Metode ini merupakan metode pencarian berurutan. Dari data yang

diketahui, elemen yang dicari dibandingkan satu persatu. Jika ditemukan, proses

dihentikan. Jika tidak, proses dilanjutkan hingga seluruh data dibandingkan,

kemudian ditampilkan pesan bahwa data tidak ditemukan.

Adapun contoh procedure yang menggunakan bubble sort adalah:

Diketahui vektor K mempunyai elemen data sebagai berikut :

20 22 18 15 26 34 43 25.

Data yang dicari adalah 34 ( X = 34 ). Untuk mencari data tersebut mula

– mula 34 akan dibandingkan dengan data pertama yaitu 20, karena tidak sama

maka akan dibandingkan dengan 22, kemudian dengan 18 15 26 dan 34. Pada

langkah ke 6 ini data 34 telah ditemukan.

Page 14: Sorting Dan Searching

PUTU RUSDI ARIAWAN

6.2.3.2 Binary Search

Pencarian data dengan metoda biner pada vektor urut naik dimana harga

elemen-elemennya tidak ada yang sama, dapat dijelaskan sebagai berikut. Jika

vektor K memuat N buah elemen data, maka mula-mula kita tetapkan harga batas

bawah (dinyatakan dengan variabel BAWAH) dan batas atas interval (dinyatakan

dengan variabel ATAS). Dari kedua harga tersebut kemudian dapat ditentukan

titik tengah intervalnya.TENGAH = (ATAS + BAWAH) DIV 2

Data-data yang mempunyai harga yang lebih kecil dari harga data pada

titik tengah interval, akan berada di sebelah kiri titik tengah interval, sedangkan

data yang mempunyai harga yang lebih besar dari harga data pada posisi titik

tengah interval berada di sebelah kanan. Jika data yang dicari sama dengan data

pada posisi tengah maka data telah ditemukan dan pencarian selesai. Namun jika

data yang dicari lebih kecil dari data di tengah maka data tersebut berada di

sebelah kiri, selanjutnya proses pencarian hanya akan difokuskan pada interval

tersebut. Untuk itu harga atas perlu digeser menjadi tengah-1. hal sebaliknya

dilakukan jika data yang dicari mempunyai harga yang lebih besar dari data pada

posisi tengah, hanya saja harga bawah akna dinaikkan menjadi bawah+1.

Selanjutnya harga tengah akan ditentukan kembali berdasarkan harga

bawah dan atas yang baru pada interval dimana data yang dicari berada.

Perhitungan dilakukan sebagimana formula di atas. Perbandingan dan pencocokan

antara data yang dicari dengan data pada posisi tengah akan dilakukan kembali.

Dan proses akan berlangsung seperti sebelumnya. Proses seperti ini akan

dilakukan secara terus-menerus selama bawah kurang dari satu atau sama dengan

harga atas.

Contoh :

Asumikan kita memiliki array A yang berisi lima buah elemen data, seperti pada

gambar berikut.

Page 15: Sorting Dan Searching

PUTU RUSDI ARIAWAN

Tabel 6.4 Tabel binary sort.

Array A

1 75

2 73

3 78

4 81

5 80

Pada gambar diatas, nilai 1, 2, 3, 4, 5 merupakan indeks array sedangkan

75, 73, 78, 81, 80 merupakan nilai yang terkandung dalam elemen-elemen array.

Nilai yang akan dicari adalah 78, maka salah satu cara yang dapat digunakan

adalah dengan membandingkan nilai 78 tersebut dengan seluruh elemen array dari

(A[1] sampai A[5]). Mula – mula kita akan membandingkan nilai 78 dengan

elemen pertama (A[1]), karena nilainya tidak sama maka pencarian akan

dilanjutkan ke elemen berikutnya (A[2]), begitu seterusnya. Pada saat elemen

ketiga, nilai A[3] sama dengan nilai yang dicari, maka pencarian akan dihentikan.

6.3 Pembahasan dan Analisa

6.3.1 Procedure dan Fungsi

6.3.1.1 Program Insertion Sort

Pada program menghitung gaji karyawan ini menggunakan 5 buah

procedure yaitu prosedur loading, prosedur head, prosedur cek1, prosedur cek2

dan prosedur insertion dan 1 buah fungsi yaitu fungsi cari detik.

1. Procedure loading ini digunakan untuk menampilkan sebuah karakter yang

dapat bergerak ke kiri dan ke kanan dan menyerupai seperti proses loading.Di

bawah ini adalah listing program dari procedure loading:

Hentikan

pencarian

Nilai yang

akan dicari

procedure loading; {procedure untuk menampilkan loading}

begin

x:=0;

repeat

begin

a:=45;

c:=45;

repeat

for b:=0 to 300 do

Page 16: Sorting Dan Searching

PUTU RUSDI ARIAWAN

begin

gotoxy(a,13);

write('>');

gotoxy(c,13);

write('<');

gotoxy(38,14);

writeln('LOADING. . .!!');

end;

a:=a+1;

c:=c-1;

until (a=60) and (c=30);

a:=45;

c:=45;

repeat

for b:=0 to 300 do

begin

gotoxy(a,13);

write(' ');

gotoxy(c,13);

write(' ');

gotoxy(38,14);

writeln('LOADING. . .!!');

end;

a:=a+1;

c:=c-1;

until (a=60) and (c=30);

a:=60;

c:=30;

repeat

for b:=0 to 300 do

begin

gotoxy(a,13);

write('<');

gotoxy(c,13);

write('>');

gotoxy(38,14);

writeln('LOADING. . .!!');

end;

a:=a-1;

c:=c+1;

until (a=45) and (c=45);

a:=60;

c:=30;

repeat

for b:=0 to 300 do

begin

gotoxy(a,13);

write(' ');

gotoxy(c,13);

write(' ');

Page 17: Sorting Dan Searching

PUTU RUSDI ARIAWAN

Kode Program 6.3 Listing program procedure loading.

Procedure loading dipanggil saat sebelum program utama

dimulai.Procedure ini berfungsi untuk menampilkan loading pada saat program

pertama dijalankan.Mekanisme prosedur ini menggunakan statemen perulangan

FOR.Perulangan FOR ini digunakan untuk mencetak suatu karakter yaitu ‟+‟

hingga batas nilai yang telah ditentukan.Karena menggunakan statemen

perulangan maka karakter ‟+‟ yang ditampilkan secara berulang maka akan

tampak seperti sebuah proses loading sebelum program utama dimulai.

2. Procedure head ini digunakan untuk menampilkan judul dari program

insertion sorting ini.Di bawah ini adalah listing program dari procedure head:

Kode Program 6.4 Listing program procedure head.

Prosedur head digunakan untuk menampilkan judul dari program

insertion sort ini.Pada prosedur digunakan gotoxy agar judul program berada di

posisi tengah – tengah jendela program.

gotoxy(38,14);

writeln('LOADING. . .!!');

end;

a:=a-1;

c:=c+1;

until (a=45) and (c=45);

end;

x:=x+1;

until x=3;

end;

procedure head; {procedure untuk menampilkan judul

program}

begin

gotoxy(25,1);

writeln('=============================');

gotoxy(25,2);

writeln('= PROGRAM INSERTION SORTING =');

gotoxy(25,3);

writeln('=============================');

writeln;

writeln;

writeln;

end;

Page 18: Sorting Dan Searching

PUTU RUSDI ARIAWAN

3. Procedure cek1 ini digunakan untuk mengecek kebenaran input dari user,

saat user menignputkan nilai maka prosedur cek ini akan mengecek apakah input

yang dimasukkkan oleh user adalah input yang benar.Di bawah ini adalah listing

program dari procedure cek1:

Kode Program 6.5 Listing program procedure cek1.

Prosedur cek ini dipanggil pada saat user telah menginputkan nilai untuk

untuk menentukan banyak bilangan yang akan ditampilkan.Setelah user

menginputkan nilai maka prosedur cek ini akan mengecek apakah input yang

dimasukkan user telah benar dan sesuai dengan kondisi yang telah ditetapkan, jika

kondisinya belum terpenuhi maka akan muncul sebuah pesan yang berisi bahwa

user salah dalam megninputkan nilai, setelah itu user akan diminta untuk

mengulang menginputkan nilai hingga kondisinya benar.

4. Procedure cek2 ini digunakan untuk mengecek kebenaran input dari user,

saat user menignputkan nilai maka prosedur cek ini akan mengecek apakah input

yang dimasukkkan oleh user adalah input yang benar.Di bawah ini adalah listing

program dari procedure cek2:

procedure cek1; {procedure untuk mengecek validasi}

begin

if kode<>0 then

begin

write('Input harus angka...!!!');

writeln;

z:=0;

end

else

if n<1 then

begin

write('Input tidak boleh kurang dari 1...!!!');

writeln;

z:=0;

end

else

z:=1;

end;

Page 19: Sorting Dan Searching

PUTU RUSDI ARIAWAN

Kode Program 6.6 Listing program procedure cek2.

Prosedur cek2 ini dipanggil pada saat user telah menginputkan nilai

untuk untuk menentukan pilihan untuk mengnput bilangan.Setelah user

menginputkan nilai maka prosedur cek ini akan mengecek apakah input yang

dimasukkan user telah benar dan sesuai dengan kondisi yang telah ditetapkan, jika

kondisinya belum terpenuhi maka akan muncul sebuah pesan yang berisi bahwa

user salah dalam megninputkan nilai, setelah itu user akan diminta untuk

mengulang menginputkan nilai hingga kondisinya benar.

5.Procedure insertion ini digunakan untuk mengurutkan data yang awalnya masih

belum urut.Di bawah ini adalah listing program dari procedure insertion:

Kode Program 6.7 Listing program procedure insertion.

Prosedur insertion ini di panggil pada saat user telah selesai

menginputkan semua bilangan yang akan ditampilkan.Prosedur ini berfungsi

procedure cek2; {procedure untuk mengecek validasi}

begin

if (pil<1) and (pil>2) then

begin

write('Input tidak ada dalam pilihan...!!!');

writeln;

z:=0;

end

else

z:=1;

end;

procedure insertion;

begin

for i:=2 to n do

begin

y:=Data[i];

j:= i-1;

while ( y < data[j]) and (j>0) do

begin

data[j+1] := data[j];

dec(j);

end;

data[j+1] := y

end;

end;

Page 20: Sorting Dan Searching

PUTU RUSDI ARIAWAN

untuk mengurutkan bilangan – bilangan yang telah diinputkan oleh user.Prosedur

ini menggunakan metode insertion sort yaitu metode pengurutan data dengan cara

mengecek data satu persatu mulai dari yang kedua sampai dengan yang terakhir.

Apabila ditemukan nilai data yang lebih kecil dari yang sebelumnya, maka data

tersebut disisipkan pada posisi yang sesuai.

6. Fungsi caridetik ini digunakan untuk mencari berapa lama proses yang

diperlukan untuk mengurutkan data yang telah diinputkan user secara

random.Di bawah ini adalah listing program dari fungsi caridetik :

Kode Program 6.8 Listing program fungsi caridetik.

Fungsi ini digunakan untuk memanggil waktu proses pengurutan bilangan

yang dihitung dari nol detik.

6.3.1.2 Program Sequential Search

Pada program menghitung gaji karyawan ini menggunakan 5 buah

procedure yaitu prosedur loading, prosedur head, prosedur cek1, prosedur cek2

dan prosedur sequential dan 1 buah fungsi yaitu fungsi cari detik.

1. Procedure loading ini digunakan untuk menampilkan sebuah karakter yang

dapat bergerak ke kiri dan ke kanan dan menyerupai seperti proses loading.Di

bawah ini adalah listing program dari procedure loading:

Function caridetik(w : Word) : String;

var

s : String; {fungsi untuk mencari lama proses sorting}

begin

Str(w:0,s);

if Length(s) = 1 then

s := '0' + s;

caridetik := s;

end;

Page 21: Sorting Dan Searching

PUTU RUSDI ARIAWAN

procedure loading; {procedure untuk menampilkan loading}

begin

x:=0;

repeat

begin

a:=45;

c:=45;

repeat

for b:=0 to 300 do

begin

gotoxy(a,13);

write('>');

gotoxy(c,13);

write('<');

gotoxy(38,14);

writeln('LOADING. . .!!');

end;

a:=a+1;

c:=c-1;

until (a=60) and (c=30);

a:=45;

c:=45;

repeat

for b:=0 to 300 do

begin

gotoxy(a,13);

write(' ');

gotoxy(c,13);

write(' ');

gotoxy(38,14);

writeln('LOADING. . .!!');

end;

a:=a+1;

c:=c-1;

until (a=60) and (c=30);

a:=60;

c:=30;

repeat

Page 22: Sorting Dan Searching

PUTU RUSDI ARIAWAN

Kode Program 6.9 Listing program procedure loading.

Procedur loading dipanggil saat sebelum program utama

dimulai.Procedure ini berfungsi untuk menampilkan loading pada saat program

pertama dijalankan.Mekanisme prosedur ini menggunakan statemen perulangan

FOR.Perulangan FOR ini digunakan untuk mencetak suatu karakter yaitu ‟+‟

hingga batas nilai yang telah ditentukan.Karena menggunakan statemen

perulangan maka karakter ‟+‟ yang ditampilkan secara berulang maka akan

tampak seperti sebuah proses loading sebelum program utama dimulai.

2. Procedure head ini digunakan untuk menampilkan judul dari program

insertion sorting ini.Di bawah ini adalah listing program dari procedure head:

for b:=0 to 300 do

begin

gotoxy(a,13);

write('<');

gotoxy(c,13);

write('>');

gotoxy(38,14);

writeln('LOADING. . .!!');

end;

a:=a-1;

c:=c+1;

until (a=45) and (c=45);

a:=60;

c:=30;

repeat

for b:=0 to 300 do

begin

gotoxy(a,13);

write(' ');

gotoxy(c,13);

write(' ');

gotoxy(38,14);

writeln('LOADING. . .!!');

end;

a:=a-1;

c:=c+1;

until (a=45) and (c=45);

end;

x:=x+1;

until x=3;

end;

Page 23: Sorting Dan Searching

PUTU RUSDI ARIAWAN

Kode Program 6.10 Listing program procedure head.

Prosedur head digunakan untuk menampilkan judul dari program

insertion sort ini.Pada prosedur digunakan gotoxy agar judul program berada di

posisi tengah – tengah jendela program.

3. Procedure cek1 ini digunakan untuk mengecek kebenaran input dari user,

saat user menignputkan nilai maka prosedur cek ini akan mengecek apakah input

yang dimasukkkan oleh user adalah input yang benar.Di bawah ini adalah listing

program dari procedure cek1:

Kode Program 6.11 Listing program procedure cek1.

procedure head; {procedure untuk menampilkan judul

program}

begin

gotoxy(25,1);

writeln('=============================');

gotoxy(25,2);

writeln('= PROGRAM SEQUENTIAL SEARCH =');

gotoxy(25,3);

writeln('=============================');

writeln;

writeln;

writeln;

end;

procedure cek1; {procedure untuk mengecek validasi}

begin

if kode<>0 then

begin

write('Input harus angka...!!!');

writeln;

z:=0;

end

else

if n<1 then

begin

write('Input tidak boleh kurang dari 1...!!!');

writeln;

z:=0;

end

else

z:=1;

end;

Page 24: Sorting Dan Searching

PUTU RUSDI ARIAWAN

Prosedur cek ini dipanggil pada saat user telah menginputkan nilai untuk

untuk menentukan banyak bilangan yang akan ditampilkan.Setelah user

menginputkan nilai maka prosedur cek ini akan mengecek apakah input yang

dimasukkan user telah benar dan sesuai dengan kondisi yang telah ditetapkan, jika

kondisinya belum terpenuhi maka akan muncul sebuah pesan yang berisi bahwa

user salah dalam megninputkan nilai, setelah itu user akan diminta untuk

mengulang menginputkan nilai hingga kondisinya benar.

4. Procedure cek2 ini digunakan untuk mengecek kebenaran input dari user,

saat user menignputkan nilai maka prosedur cek ini akan mengecek apakah input

yang dimasukkkan oleh user adalah input yang benar.Di bawah ini adalah listing

program dari procedure cek2:

Kode Program 6.12 Listing program procedure cek2.

Prosedur cek2 ini dipanggil pada saat user telah menginputkan nilai

untuk untuk menentukan pilihan untuk mengnput bilangan.Setelah user

menginputkan nilai maka prosedur cek ini akan mengecek apakah input yang

dimasukkan user telah benar dan sesuai dengan kondisi yang telah ditetapkan, jika

kondisinya belum terpenuhi maka akan muncul sebuah pesan yang berisi bahwa

user salah dalam megninputkan nilai, setelah itu user akan diminta untuk

mengulang menginputkan nilai hingga kondisinya benar.

5. Procedure sequential ini digunakan untuk mencari bilangan yang diinputkan

oleh user.Di bawah ini adalah listing program dari procedure sequential:

procedure cek2; {procedure untuk mengecek validasi}

begin

if (pil<1) and (pil>2) then

begin

write('Input tidak ada dalam pilihan...!!!');

writeln;

z:=0;

end

else

z:=1;

end;

Page 25: Sorting Dan Searching

PUTU RUSDI ARIAWAN

Kode Program 6.13 Listing program procedure sequential.

Prosedur sequential ini di panggil pada saat user telah selesai

menginputkan semua bilangan yang akan ditampilkan.Prosedur ini berfungsi

untuk mencari satu bilangan yang sebelumnya telah diinputkan oleh user.Prosedur

ini menggunakan metode sequential search yaitu metode pencarian berurutan.

Dari data yang diketahui, elemen yang dicari dibandingkan satu persatu. Jika

ditemukan, proses dihentikan. Jika tidak, proses dilanjutkan hingga seluruh data

dibandingkan, kemudian ditampilkan pesan bahwa data tidak ditemukan.

6. Fungsi caridetik ini digunakan untuk mencari berapa lama proses yang

diperlukan untuk mengurutkan data yang telah diinputkan user secara random.Di

bawah ini adalah listing program dari fungsi caridetik :

Kode Program 6.14 Listing program fungsi sequential.

procedure sequential; {prosedur untuk mencari data}

begin

write('bil yang dicari: ');

readln(n);

ada:=false;

i:=0;

while (data[i] <> n) and (i<n) do

begin

i:=i+1;

if data[i]=n then

begin

ada:=true;

writeln('Angka yang dicari ada pada deret: ',i);

end;

end;

if (data[i] <> n) then

begin

writeln('Angka yang dicari tidak ada dalam

daftar..');

end;

end;

Function caridetik(w : Word) : String;

var

s : String; {fungsi untuk mencari lama proses sorting}

begin

Str(w:0,s);

if Length(s) = 1 then

s := '0' + s;

caridetik := s;

end;

Page 26: Sorting Dan Searching

PUTU RUSDI ARIAWAN

Fungsi ini digunakan untuk memanggil waktu proses pengurutan

bilangan yang dihitung dari nol detik.

6.3.2 Algoritma

6.3.2.1 Program Insertion Sort

a. Algoritma Prosedur Cek1.

1. Mulai.

2. Apakah nilai yang diinputkan berupa karakter? Jika ya, maka akan muncul

pesan „Input salah‟ lalu lanjut ke langkah 5, jika tidak lanjut ke langkah 3.

3. Apakah n<0? Jika ya,maka akan muncul pesan „input salah‟ lalu lanjut ke

langkah 5, jika tidak maka lanjut ke langkah 4.

4. Isi nilai z dengan z+1.

5. Selesai.

b. Algoritma Prosedur Cek2.

1. Mulai.

2. Apakah pil<1? Jika ya, maka akan muncul pesan „Input salah‟ lalu lanjut ke

langkah 5, jika tidak lanjut ke langkah 3.

3. Apakah pil>2? Jika ya,maka akan muncul pesan „input salah‟ lalu lanjut ke

langkah 5, jika tidak maka lanjut ke langkah 4.

4. Isi nilai z dengan z+1.

5. Selesai.

c. Algoritma Prosedur Insertion.

1. Mulai.

2. Persiapan i diisi dengan 2.

3. Apakah i = n, jika ya lanjut ke langkah 7, jika tidak “y diisi dengan i – 1”, y

diisi dengan data[i] dan lanjut ke langkah nomor 3.

4. Apakah “y<data[j]” dan “j>0”, jika ya isikan “data[j+1] dengan data[j]” dan

“j” diisi dengan “j-1”,setelah itu kembali cek apakah “y<data[j]” dan “j>0”,

dan jika tidak lanjut ke langkah nomor 4.

Page 27: Sorting Dan Searching

PUTU RUSDI ARIAWAN

5. “Data[j+1]” diisi dengan y .

6. i diisi dengan i+1 dan kembali ke langkah 3.

7. Selesai

d. Algoritma Program Utama.

1. Mulai.

2. Masukkan berapa banyak bilangan yang akan dimasukkan(n).

3. Panggil prosedur cek1.

4. Apakah z=1?jika ya, maka lanjut ke langkah 5,jika tidak kembali ke langkah

2.

5. Masukan pilihan (e), pilih 1 jika ingin menginputkan secara manual dan pilih

2 jika ingin menginputkan secara otomatis.

6. Panggil prosedur cek1.

7. Panggil prosedur cek2.

8. Apakah z=1? Jika ya,maka lanjut ke langkah 9, jika tidak kembali ke langkah

5.

9. Apakah pilihan sama dengan 1, jika ya isikan pil dengan 1 dan lanjut ke

langkah 10, jika pil sama dengan 2 maka lanjut ke langkah 12.

10. Apakah i = n, jika ya lanjut ke langkah 14, jika tidak lanjut ke langkah 11.

11. Masukkan data[i], dan isikan i dengan i+1 lalu kembali ke langkah 10.

12. Apakah i = n, jika ya lanjut ke langkah 14, jika tidak lanjut ke langkah 13.

13. Isikan data[i] dengan random, dan isikan i dengan i+1 lalu kembali ke langkah

12.

14. Panggil prosedur insertion.

15. Isikan i dengan 1.

16. Apakah i sama dengan n, jika ya lanjut ke langkah 15 , jika tidak lanjut ke

langkah 14.

17. Tampilkan data[i], dan isikan i dengan i+1, lalu kembali ke langkah 13.

18. Apakah ingin mengulang Program, jika ya kembali ke langkah 1, jika tidak

stop.

Page 28: Sorting Dan Searching

PUTU RUSDI ARIAWAN

6.3.2.2 Program Sequential Search

a. Algoritma Prosedur Cek1.

1. Mulai.

2. Apakah nilai yang diinputkan berupa karakter? Jika ya, maka akan muncul

pesan „Input salah‟ lalu lanjut ke langkah 5, jika tidak lanjut ke langkah 3.

3. Apakah n<0? Jika ya,maka akan muncul pesan „input salah‟ lalu lanjut ke

langkah 5, jika tidak maka lanjut ke langkah 4.

4. Isi nilai z dengan z+1.

5. Selesai.

b. Algoritma Prosedur Cek2.

1. Mulai.

2. Apakah pil<1? Jika ya, maka akan muncul pesan „Input salah‟ lalu lanjut ke

langkah 5, jika tidak lanjut ke langkah 3.

3. Apakah pil>2? Jika ya,maka akan muncul pesan „input salah‟ lalu lanjut ke

langkah 5, jika tidak maka lanjut ke langkah 4.

4. Isi nilai z dengan z+1.

5. Selesai.

c. Algoritma Prosedur sequential.

1. Mulai.

2. Persiapan i diisi dengan 0 dan ada diisi dengan false.

3. Apakah data[ i] <> n dan i < n?, jika ya lanjut ke langkah 4 dan jika tidak

lanjut ke langkah 5.

4. Nilai i diisi dengan i+1 dan tampilkan “data yang dicari ada di deret (i)” lalu

kembali ke langkah 3.

5. Apakah data[ i] <> n ? jika yam aka tampilkan “data yang dicari tidak ada

dalam daftar”

6. Selesai.

Page 29: Sorting Dan Searching

PUTU RUSDI ARIAWAN

d. Algoritma Program Utama.

1. Mulai.

2. Masukkan berapa banyak bilangan yang akan dimasukkan(n).

3. Panggil prosedur cek1.

4. Apakah z=1?jika ya, maka lanjut ke langkah 5,jika tidak kembali ke langkah

2.

5. Masukan pilihan (e), pilih 1 jika ingin menginputkan secara manual dan pilih

2 jika ingin menginputkan secara otomatis.

6. Panggil prosedur cek1.

7. Panggil prosedur cek2.

8. Apakah z=1? Jika ya,maka lanjut ke langkah 9, jika tidak kembali ke langkah

5.

9. Apakah pilihan sama dengan 1, jika ya isikan pil dengan 1 dan lanjut ke

langkah 10, jika pil sama dengan 2 maka lanjut ke langkah 12.

10. Apakah i = n, jika ya lanjut ke langkah 14, jika tidak lanjut ke langkah 11.

11. Masukkan data[i], dan isikan i dengan i+1 lalu kembali ke langkah 10.

12. Apakah i = n, jika ya lanjut ke langkah 14, jika tidak lanjut ke langkah 13.

13. Isikan data[i] dengan random, dan isikan i dengan i+1 lalu kembali ke

langkah 12.

14. Panggil prosedur sequential.

15. Apakah ingin mengulang Program, jika ya kembali ke langkah 1, jika tidak

stop.

Page 30: Sorting Dan Searching

PUTU RUSDI ARIAWAN

6.3.3 Flowchart

6.3.3.1 Program Insertion Sort

a.Flowchart Prosedur Cek1.

Mulai

z ← 0

n=karakter

N<0

N

Selesai

N

Y

Y

z ← z+1

Output :

‘Input salah’

Gambar 6.1 Flowchart procedure cek1.

b.Flowchart Prosedur Cek2.

Mulai

z ← 0

Pil<1

Pil>2

N

Selesai

N

Y

Y

z ← z+1

Output :

‘Input salah’

Gambar 6.2 Flowchart procedure cek2.

Page 31: Sorting Dan Searching

PUTU RUSDI ARIAWAN

c.Flowchart Prosedur Insertion.

Mulai

N

y ← data[i]

j ← i-1

i=n

i←2

SelesaiY

i ← n

y<data[j]

Y

Y

Data[j+1] ← data[j]

j ← j-1

N

Nj>0

Data[j+1] ← y

Gambar 6.3 Flowchart procedure insertion.

Page 32: Sorting Dan Searching

PUTU RUSDI ARIAWAN

d.Flowchart Program Utama.

pil=1

N

i>n

N

Input :

bil?(data[i])

i ← i+1

Y

insertion

Y

i>n

Dat[i] ←

random(100)

Output :

data[i]

N

Y

i ← i+1

i ← 1

i>n

Output :

data[i]

N

i ← i+1

YLagi?

N

Selesai

YA

Mulai

Input :

pilihan?(pil)

i←1

z←0

Input :

Banyak data?(n)

A

cek1

z=1YN

z=1 cek1

Y

Ncek2

Gambar 6.4 Flowchart program utama insertion sort.

Page 33: Sorting Dan Searching

PUTU RUSDI ARIAWAN

TRACING 1:

Input : n : 3

pil : 2

Proses : i : 1 2 3 4 2 3 4 1 2 3 4

Data[i] : [3,2 ,1] → [3,3,1] → [2,3,1] → [2,3,3]

→ [2,2,3] → [1,2,3]

j : 1 0 2 1 0

y : 2 1

Output : data[i] : 1 , 2 , 3 {setelah diurut}

TRACING 2:

Input : n : 3

pil : 1

Proses : i : 1 2 3 4 2 3 4 2 3 4

Data[i] : [3,1 ,2] → [3,3,2] → [1,3,2] → [1,3,3]

→ [1,2,3]

j : 1 0 2 1

y : 1 2

Output : data[i] : 1 , 2 , 3 {setelah diurut}

Page 34: Sorting Dan Searching

PUTU RUSDI ARIAWAN

6.3.3.2 Program Sequential Search

a.Flowchart Prosedur Cek1.

Mulai

z ← 0

n=karakter

N<0

N

Selesai

N

Y

Y

z ← z+1

Output :

‘Input salah’

Gambar 6.5 Flowchart procedure cek1.

b.Flowchart Prosedur Cek2.

Mulai

z ← 0

Pil<1

Pil>2

N

Selesai

N

Y

Y

z ← z+1

Output :

‘Input salah’

Gambar 6.6 Flowchart procedure cek2.

Page 35: Sorting Dan Searching

PUTU RUSDI ARIAWAN

c.Flowchart Prosedur Sequential.

Mulai

Data[i]<>n

i ← 0

z ← 0

Ada ← false

Y

i ← i+1i<nY

Output :

‘Data ada

di deret’,i

Data[i]=n

Ada ← true

Data[i]<>n

Y

N

N

Output :

‘Data tidak

ada’

Selesai

N

Input :

Cari data?(n)

Cek1

z=1N

Y

Gambar 6.7 Flowchart prosedur sequential.

Page 36: Sorting Dan Searching

PUTU RUSDI ARIAWAN

d.Flowchart Program Utama.

pil=1

N

i>n

N

Input :

bil?(data[i])

i ← i+1

Y

sequential

Y

i>n

Data[i] ←

random(100)

Output :

data[i]

N

Y

i ← i+1

Lagi?

N

YA

Selesai

Mulai

Input :

pilihan?(pil)

i←1

z←0

Input :

Banyak data?(n)

A

cek1

z=1YN

z=1 cek1N

cek2

Gambar 6.8 Flowchart program utama sequential search.

Page 37: Sorting Dan Searching

PUTU RUSDI ARIAWAN

TRACING 1:

Input : n : 3

pil : 2

Proses : i : 1 2 3 4 2 3 4 1 2 3 4

N : 3 2

Data[i] : [3,2 ,1]

ada : ‟false‟ ‟true‟

Output : : ‟data ada di deret‟,2

TRACING 2:

Input : n : 3

pil : 2

Proses : i : 1 2 3 4 2 3 4 1 2 3 4

N : 3 5

Data[i] : [3,2 ,1]

ada : ‟false‟

Output : : ‟data tidak ada‟

Page 38: Sorting Dan Searching

PUTU RUSDI ARIAWAN

6.3.4 Listing Program

6.3.4.1 Program Insertion Sort

program sorting;

uses

windos,wincrt;

const

max=1000;

var

data:array[1..max] of integer;

n,i,j,y,kode:integer;

h,h2,m,m2,s,s1,s2,hund,hund2:word;

pertama,terakhir,lama:real;

pil,z:byte;

huruf:string;

x,a,c,b,q:integer;

exit:char;

procedure loading; {procedure untuk menampilkan loading}

begin

x:=0;

repeat

begin

a:=45;

c:=45;

repeat

for b:=0 to 300 do

begin

gotoxy(a,13);

write('>');

gotoxy(c,13);

write('<');

gotoxy(38,14);

writeln('LOADING. . .!!');

end;

a:=a+1;

c:=c-1;

until (a=60) and (c=30);

a:=45;

c:=45;

repeat

for b:=0 to 300 do

begin

gotoxy(a,13);

write(' ');

gotoxy(c,13);

write(' ');

gotoxy(38,14);

writeln('LOADING. . .!!');

end;

a:=a+1;

c:=c-1;

until (a=60) and (c=30);

Page 39: Sorting Dan Searching

PUTU RUSDI ARIAWAN

a:=60;

c:=30;

repeat

for b:=0 to 300 do

begin

gotoxy(a,13);

write('<');

gotoxy(c,13);

write('>');

gotoxy(38,14);

writeln('LOADING. . .!!');

end;

a:=a-1;

c:=c+1;

until (a=45) and (c=45);

a:=60;

c:=30;

repeat

for b:=0 to 300 do

begin

gotoxy(a,13);

write(' ');

gotoxy(c,13);

write(' ');

gotoxy(38,14);

writeln('LOADING. . .!!');

end;

a:=a-1;

c:=c+1;

until (a=45) and (c=45);

end;

x:=x+1;

until x=3;

end;

procedure head; {procedure untuk menampilkan judul program}

begin

gotoxy(25,1);

writeln('=============================');

gotoxy(25,2);

writeln('= PROGRAM INSERTION SORTING =');

gotoxy(25,3);

writeln('=============================');

writeln;

writeln;

writeln;

end;

Page 40: Sorting Dan Searching

PUTU RUSDI ARIAWAN

procedure cek1; {procedure untuk mengecek validasi}

begin

if kode<>0 then

begin

write('Input harus angka...!!!');

writeln;

z:=0;

end

else

if n<1 then

begin

write('Input tidak boleh kurang dari 1...!!!');

writeln;

z:=0;

end

else

z:=1;

end;

procedure cek2; {procedure untuk mengecek validasi}

begin

if (pil<>1) and (pil<>2) then

begin

write('Input tidak ada dalam pilihan...!!!');

writeln;

z:=0;

end

else

z:=1;

end;

Function caridetik(w : Word) : String;

var

s : String; {fungsi untuk mencari lama proses sorting}

begin

Str(w:0,s);

if Length(s) = 1 then

s := '0' + s;

caridetik := s;

end;

procedure insertion; {procedure untuk mengurutkan data}

begin

for i:=2 to n do

begin

y:=Data[i];

j:= i-1;

while ( y < data[j]) and (j>0) do

begin

data[j+1] := data[j];

dec(j);

Page 41: Sorting Dan Searching

PUTU RUSDI ARIAWAN

end;

data[j+1] := y

end;

end;

begin {awal program utama}

loading;

repeat

clrscr;

head;

repeat

write('Masukkan banyak bilangan yang ingin ditampilkan

+> ');readln(huruf);

val(huruf,n,kode); {input banyak bilangan}

cek;

until z=1;

writeln;

writeln('1.input manual'); {input metode input}

writeln('2.input random');

writeln;

repeat

write('pilih metode input +>');readln(huruf);

val(huruf,pil,kode);

cek;

until z=1;

writeln;

if pil=1 then

begin {input secara manual}

for i:=1 to n do

begin

write('masukkan bilangan ke ',i,' +> ');

readln(data[i]);

end;

writeln;

writeln('Data sebelum diurut...');

for i:=1 to n do

write(data[i]:4);

end

else

begin

writeln('Data sebelum diurut...');

randomize;

for i:= 1 to n do

begin {input secara otomatis}

data[i]:=random(100);

write(data[i]:4);

end;

end;

Page 42: Sorting Dan Searching

PUTU RUSDI ARIAWAN

Kode Program 6.15 Listing program insertion sort.

GetTime(h,m,s,hund); {pengukur waktu pertama}

val(caridetik(s),s1,q);

val(caridetik(hund),s2,q);

pertama:=s1+s2/100;

insertion;

GetTime(h,m,s,hund); {pengukur waktu kedua}

val(caridetik(s),s1,q);

val(caridetik(hund),s2,q);

terakhir:=s1+s2/100;

writeln;

writeln;

write('Tekan enter untuk mengurutkan data...');

writeln;

readln;

clrscr;

head;

writeln;

writeln('Data setelah diurut...');

writeln;

for i:=1 to n do {data setelah diurutkan}

begin

write(data[i]:4);

end;

writeln;

writeln;

if (terakhir < pertama) then

lama:=60-pertama+terakhir

else {waktu yang diperlukan dalam pengurutan}

lama:=terakhir-pertama;

writeln('Waktu yang diperlukan untuk mengurutkan data

sebanyak ',n,' adalah ',lama:0:3,' detik');

writeln;

write('Tekan x untuk keluar dari program...');

writeln;

exit:=readkey;

until (exit='x') or (exit='X');

donewincrt;

end. {akhir program utama}

Page 43: Sorting Dan Searching

PUTU RUSDI ARIAWAN

6.3.4.2 Program Sequential Search

program searching;

uses

windos,wincrt;

const

max=1000;

var

data:array[1..max] of integer;

n,n1,i,j,y,kode,q:integer;

h,h2,m,m2,s,s1,s2,hund,hund2:word;

pertama,terakhir,lama:real;

pil,z:byte;

ada:boolean;

huruf:string;

x,a,c,b:integer;

exit:char;

procedure loading; {procedure untuk menampilkan loading}

begin

x:=0;

repeat

begin

a:=45;

c:=45;

repeat

for b:=0 to 300 do

begin

gotoxy(a,13);

write('>');

gotoxy(c,13);

write('<');

gotoxy(38,14);

writeln('LOADING. . .!!');

end;

a:=a+1;

c:=c-1;

until (a=60) and (c=30);

a:=45;

c:=45;

repeat

for b:=0 to 300 do

begin

gotoxy(a,13);

write(' ');

gotoxy(c,13);

write(' ');

gotoxy(38,14);

writeln('LOADING. . .!!');

end;

a:=a+1;

c:=c-1;

until (a=60) and (c=30);

Page 44: Sorting Dan Searching

PUTU RUSDI ARIAWAN

a:=60;

c:=30;

repeat

for b:=0 to 300 do

begin

gotoxy(a,13);

write('<');

gotoxy(c,13);

write('>');

gotoxy(38,14);

writeln('LOADING. . .!!');

end;

a:=a-1;

c:=c+1;

until (a=45) and (c=45);

a:=60;

c:=30;

repeat

for b:=0 to 300 do

begin

gotoxy(a,13);

write(' ');

gotoxy(c,13);

write(' ');

gotoxy(38,14);

writeln('LOADING. . .!!');

end;

a:=a-1;

c:=c+1;

until (a=45) and (c=45);

end;

x:=x+1;

until x=3;

end;

procedure head; {procedure untuk menampilkan judul program}

begin

gotoxy(25,1);

writeln('=============================');

gotoxy(25,2);

writeln('= PROGRAM SEQUENTIAL SEARCH =');

gotoxy(25,3);

writeln('=============================');

writeln;

writeln;

writeln;

end;

Page 45: Sorting Dan Searching

PUTU RUSDI ARIAWAN

procedure cek1; {prosedure untuk mengecek

validasi}

begin

if kode<>0 then

begin

write('Input harus angka...!!!');

writeln;

z:=0;

end

else

if n<1 then

begin

write('Input tidak boleh kurang dari 1...!!!');

writeln;

z:=0;

end

else

z:=1;

end;

procedure cek2; {prosedure untuk mengecek

validasi}

begin

if (pil<1) and (pil>2) then

begin

write('Input tidak ada dalam pilihan...!!!');

writeln;

z:=0;

end

else

z:=1;

end;

Function caridetik(w : Word) : String;

var

s : String;

begin {prosedur untuk mencari lama proses pencarian data}

Str(w:0,s);

if Length(s) = 1 then

s := '0' + s;

caridetik := s;

end;

procedure sequential; {prosedur untuk mencari data}

begin

write('bil yang dicari: ');

readln(n);

ada:=false;

i:=0;

while (data[i] <> n) and (i<n) do

begin

i:=i+1;

Page 46: Sorting Dan Searching

PUTU RUSDI ARIAWAN

if data[i]=n then

begin

ada:=true;

writeln('Angka yang dicari ada pada deret: ',i);

end;

end;

if (data[i] <> n) then

begin

writeln('Angka yang dicari tidak ada dalam

daftar..');

end;

end;

begin {awal program utama}

loading;

repeat

clrscr;

lama:=0;

head;

repeat

write('Masukkan banyak bilangan yang ingin ditampilkan

+> ');readln(huruf);

val(huruf,n,kode);

cek; {input banyak bilangan}

n1:=n;

until z=1;

writeln;

writeln('1.input manual');

writeln('2.input random'); {input metode input}

writeln;

repeat

write('pilih metode input +>');readln(huruf);

val(huruf,pil,kode);

cek;

until z=1;

writeln;

if pil=1 then {input nilai secara manual}

begin

for i:=1 to n do

begin

write('masukkan bilangan ke ',i,' +>;

readln(data[i]);

end;

writeln;

for i:=1 to n do

write(data[i]:4);

end

else

begin {input nilai sacara otomatis}

randomize;

for i:= 1 to n do

Page 47: Sorting Dan Searching

PUTU RUSDI ARIAWAN

Kode Program 6.16 Listing program sequential search

begin

data[i]:=random(100);

write(data[i]:4); end

else

begin

randomize;

for i:= 1 to n do

begin

data[i]:=random(100);

write(data[i]:4);

end;

end;

writeln;

GetTime(h,m,s,hund); {waktu awal}

val(caridetik(s),s1,q);

val(caridetik(hund),s2,q);

pertama:=s1+s2/100;

sequential;

GetTime(h,m,s,hund); {waktu akhir}

val(caridetik(s),s1,q);

val(caridetik(hund),s2,q);

terakhir:=s1+s2/100;

writeln;

writeln;

if (terakhir < pertama) then

lama:=60-pertama+terakhir

else

lama:=terakhir-pertama; {tampilkan lama proses

pencarian data}

writeln('Waktu yang diperlukan untuk mengurutkan data

sebanyak ',n1,' adalah ',lama:0:3,' detik');

writeln;

write('Tekan x untuk keluar dari program...');

writeln;

exit:=readkey;

until (exit='x') or (exit='X'); {akhir program utama}

donewincrt;

end.

Page 48: Sorting Dan Searching

PUTU RUSDI ARIAWAN

6.4 Uji coba Program

6.4.1 Program Insertion Sort

6.4.1.1 Uji Coba

Dalam menguji coba program insertion sort, pertama inputkan

banyaknya bilangan yang akan ditampilkan. Dalam menginputkan banykannya

bilangan harus menginputkan angka,jika yang diinputkan adalah huruf (karakter)

maka akan muncul tampilan ” Input harus angka”. Sedangkan jika yang

diinputkan adalah angka yang kurang dari 0 , maka akan muncul tampilan ”Input

tidak boleh kurang dari 0”.Yang kedua adalah menginputkan metode pengisian

bilangan,ada 2 pilihan yaitu secara otomatis dan secara manual.Aturan dalam

menginputkan pilihan sama dengan menginputkan banyaknya bilangan.Jika user

menginputkan angka yang bukan 1 atau bukan 2 maka akan muncul pesan”Input

tidak ada dalam pilihan” Di bawah ini adalah tampilan program setelah

dijalankan.

Gambar 6.9 Input banyak bilangan dengan huruf.

Jika user menginputkan banyaknya bilangan yang akan ditampilkan

dengan huruf atau karakter maka akan muncul sebuah pesan yang memberitahu

bahwa user salah dalam menginput nilai, setelah itu user diminta untuk meninput

ulang banyaknya bilangan.

Page 49: Sorting Dan Searching

PUTU RUSDI ARIAWAN

Gambar 6.10 Input kurang dari 0.

Jika user menginputkan banyaknya bilangan yang akan ditampilkan

dengan nilai kurang dari 0 maka akan muncul sebuah pesan yang memberitahu

bahwa user salah dalam menginput nilai, setelah itu user diminta untuk meninput

ulang banyaknya bilangan.

Gambar 6.11 Input pilihan tidak sama dengan 1 atau 2.

Jika user tidak menginputkan pilihan metode input tidak sama dengan

satu atau tidak sama dengan dua maka akan muncul sebuah pesan yang

memberitahu bahwa user salah dalam menginputkan pilihan, setelah itu user

diminta untuk meninput ulang pilihan.

Page 50: Sorting Dan Searching

PUTU RUSDI ARIAWAN

Gambar 6.12 Input bilangan secara manual.

Gambar diatas adalah tampilan jika user memilih untuk menginputkan

bilangan secara manual.User akan menginputkan bilangan sebanyak N bilangan

yang diinginkan.

Gambar 6.13 Input bilangan secara otomatis.

Gambar diatas adalah tampilan jika user memilih untuk menginputkan

bilangan secara otomatis,komputer akan menginputkan bilangan secara acak

sesuai dan menampilkan banyak bilangan sesuai dengan yang diminta user saat

menginput banyaknya bilangan yang akan ditampilkan.

Page 51: Sorting Dan Searching

PUTU RUSDI ARIAWAN

Gambar 6.14 Tampilan akhir program insertion sort.

Gambar diatas adalah tampilan akhir dari program insertion sort.Pada saat

tampilan akhir muncul maka akan muncul konfirmasi untuk keluar dari

program.Jika user menekan hurup ”x” atau ”X” pada keyboard maka program

akan berhenti.Tetapi jika user menekan keyword selain ”x” atau ”X” maka

program akan mengulang lagi dari awal.

6.4.1.2 Kesimpulan

Kesimpumpulan yang didapat setelah menguji coba program insertion

sort adalah lama proses pengurutan data dari sekian banyak bilangan tidak

memerlukan waktu yang lama, waktu yang diperlukan untuk mengurutkan

bilangan tidak sampai 1 detik.Kelemahan dari program ini adalah ada saat user

tidak menginputkan nilai lalu menekan enter,pesan yang muncul tidak sesuai

dengan yang diinginkan.Pesan yang keluar sama dengan pesan yang keluar pada

saat user menginputkan karakter pada saat menginputakn nilai.

Page 52: Sorting Dan Searching

PUTU RUSDI ARIAWAN

6.4.2 Program Sequential Search

6.4.2.1 Uji Coba

Dalam menguji coba program sequential search, pertama inputkan

banyaknya bilangan yang akan ditampilkan. Dalam menginputkan banykannya

bilangan harus menginputkan angka,jika yang diinputkan adalah huruf (karakter)

maka akan muncul tampilan ” Input harus angka”. Sedangkan jika yang

diinputkan adalah angka yang kurang dari 0 , maka akan muncul tampilan ”Input

tidak boleh kurang dari 0”.Yang kedua adalah menginputkan metode pengisian

bilangan,ada 2 pilihan yaitu secara otomatis dan secara manual.Aturan dalam

menginputkan pilihan sama dengan menginputkan banyaknya bilangan.Jika user

menginputkan angka yang bukan 1 atau bukan 2 maka akan muncul pesan”Input

tidak ada dalam pilihan” Di bawah ini adalah tampilan program setelah

dijalankan.

Gambar 6.15 Input banyak bilangan dengan huruf.

Jika user menginputkan banyaknya bilangan yang akan ditampilkan

dengan huruf atau karakter maka akan muncul sebuah pesan yang memberitahu

bahwa user salah dalam menginput nilai, setelah itu user diminta untuk meninput

ulang banyaknya bilangan.

Page 53: Sorting Dan Searching

PUTU RUSDI ARIAWAN

Gambar 6.16 Input kurang dari 0.

Jika user menginputkan banyaknya bilangan yang akan ditampilkan

dengan nilai kurang dari 0 maka akan muncul sebuah pesan yang memberitahu

bahwa user salah dalam menginput nilai, setelah itu user diminta untuk meninput

ulang banyaknya bilangan.

Gambar 6.17 Input pilihan tidak sama dengan 1 atau 2.

Jika user tidak menginputkan pilihan metode input tidak sama dengan

satu atau tidak sama dengan dua maka akan muncul sebuah pesan yang

memberitahu bahwa user salah dalam menginputkan pilihan, setelah itu user

diminta untuk meninput ulang pilihan.

Page 54: Sorting Dan Searching

PUTU RUSDI ARIAWAN

Gambar 6.18 Input bilangan secara manual.

Gambar diatas adalah tampilan jika user memilih untuk menginputkan

bilangan secara manual.User akan menginputkan bilangan sebanyak Nbilangan

yang diinginkan.

Gambar 6.19 Input bilangan secara otomatis.

Gambar diatas adalah tampilan jika user memilih untuk menginputkan

bilangan secara otomatis,komputer akan menginputkan bilangan secara acak

sesuai dan menampilkan banyak bilangan sesuai dengan yang diminta user saat

menginput banyaknya bilangan yang akan ditampilkan.

Page 55: Sorting Dan Searching

PUTU RUSDI ARIAWAN

Gambar 6.20 Tampilan akhir program sequential search.

Gambar diatas adalah tampilan akhir dari program sequential

search.Pada saat tampilan akhir muncul maka akan muncul konfirmasi untuk

keluar dari program.Jika user menekan hurup ”x” atau ”X” pada keyboard maka

program akan berhenti.Tetapi jika user menekan keyword selain ”x” atau ”X”

maka program akan mengulang lagi dari awal.

6.4.2.2 Kesimpulan

Kesimpulan yang didapat setelah menguji program sequential search

diatas adalah suatu proses pencarian data menggunakan sequential memerlukan

waktu agak lama.Hal ini disebabkan karena proses sequential search merupakan

metode pencarian berurutan. Dari data yang diketahui, elemen yang dicari

dibandingkan satu persatu. Jika ditemukan, proses dihentikan. Jika tidak, proses

dilanjutkan hingga seluruh data dibandingkan, kemudian ditampilkan pesan

bahwa data tidak ditemukan.

Page 56: Sorting Dan Searching

PUTU RUSDI ARIAWAN

6.5 Simpulan

1. Untuk membangkitkan bilangan acak pada bahasa pascal bisa dilakukan

dengan menggunakan fungsi Random. Sebelum fungsi random dipakai,

sebelumnya harus diinisialisasi dengan prosedur Randomize.

2. Untuk melakukan lama pencatatan proses bisa dilakukan dengan mem-

packing waktu mulai dan waktu selesai sehingga didapat waktu dalam tipe

data longinteger, dari satuan long ini waktu yang didapat kita kurangkan dan

unpacking lagi, sehingga didapat waktu proses.

Page 57: Sorting Dan Searching

PUTU RUSDI ARIAWAN

BIODATA PENULIS

Nama : Putu Rusdi Ariawan

TTL : Denpasar. 19 April 1990

Agama : Hindu

Mahasiswa Teknik Elektro Unv. Udayana

Email : [email protected]

www.facebook.com/turusdi