Disusun oleh
Tim Asisten Praktikum
Algoritma dan Struktur Data
KATA PENGANTAR
Assalamualaikum wr wb
Kami panjatkan rasa syukur kepada Allah Subhanahuwataala yang telah
melimpahkan rahmatNya, sehingga kami mampu menyelesaikan penyusunan buku panduan
praktikum Algoritma dan Struktur Data.
Buku ini ini terdiri dari 14 modul dengan asumsi setiap modul diselesaikan dalam 1
kali praktikum. Setiap modul berisi pengantar materi yang akan dibahas, kemudian
dilanjutkan dengan latihan soal dikerjakan di kelas serta latihan soal dikerjakan di rumah
dengan rincian materi yang tersebar dalam beberapa modul adalah implementasi slass dan
objectnya, rekursif, pointer, link list, queue, stack, sorting dan searching.
Diharapkan setelah mahasiswa mempelajari secara tekun dan rajin dengan melakukan
praktek berulang-ulang baik di kelas maupun di rumah, mahasiswa akan mampu dan trampil
dalam menyusun suatu konsep algoritma khususnya yang terkait dengan manajemen struktur
data dengan baik dan benar kemudian mampu memngimplementasikan dalam pemrograman
menggunakan bahasa C.
Selanjutnya, kami ucapkan banyak terima kasih kepada seluruh asisten Algoritma dan
Struktur Data yang telah banyak membantu sehingga modul panduan praktikum Algoritma
dan Struktur Data ini dapat diselesaikan.
Wassalamualaikum wr wb
Yogyakarta,
Juni 2012
Dosen Pengampu
Sumarsono
DAFTAR ISI
Halaman Judul. i
Kata pengantar. ii
Daftar isi.. iii
Modul 1 : Class .................................................................................................................. 1
Modul 2 : Fungsi ................................................................................................................. 9
Modul 3 : Rekursif .............................................................................................................. 19
Modul 4 : Pointer ................................................................................................................ 23
Modul 5 : Pointer Lanjutan ................................................................................................. 26
Modul 6 : Link List ............................................................................................................. 28
Modul 7 : Link List lanjutan .............................................................................................. 32
Modul 8: Queue .................................................................................................................. 36
Modul 9 : Stack .................................................................................................................. 40
Modul 10 : Sorting .............................................................................................................. 44
Modul 11 : Sorting Lanjutan ............................................................................................... 50
Modul 12 : Searching ......................................................................................................... 54
Modul 13 : Review Materi Bagian 2 .................................................................................. 55
Modul 14 : Review Materi Bagian 2 .................................................................................. 55
MODUL PRAKTIKUM 1
CLASS
Class adalah objek perluasan dari struktur data. Kelas dapat memegang data dan fungsi.
Object adalah instan dari kelas. Di sini kelas akan menjadi JENIS dan objek akan menjadi
VARIABEL.
Formatnya.
class nama_class {
access_specifier_1:
member1;
access_specifier_2:
member2;
...
} nama_object;
Di sini isi deklarasi member dapat berupa data atau deklarasi fungsi, dan optional specifier.
Contoh:
Di fungsi utama setelah deklarasi CRectangle dan rect, untuk memanggilnya menggunakan tanda
(.) diikuti nama member.
Operator of scope ditandai dengan tanda :: (dobel titikdua). digunakan untuk mendefinisikan
member dari class di luar definisi class itu tadi.
2. Destructor
Pointers to Classes
Kita dapat menggunakan nama kelas sebagai tipe pointer. Contoh
CRectangle * prect;
Overloading operators
Bentuknya itu adalah fungsi reguler diikuti 'operator' diikuri tanda operator yang mau
kita overload.
Sintak Overloding operator :
type operator sign (parameters) { /*...*/ }
Contoh Program Overloding operator
Gambar diatas menunjukkan bagaimana kata kunci this bekerja menunjukkan kepada diri
sendiri atau object yang menaunginya.
Static Member
Class dapat berupa static member selain terdapat banyak data dan fungsi didalamnya. Static
variable merupakan variable statis dan tidak berubah sejak pertamakali dideklarasikan.
Variable ini sering disebut dengan variable class karena nilainya adalah unique dan satusatunya dalam class tersebut.
Tugas di Rumah
Silahkan Lengkapi Kode dibawah ini untuk menghasilkan program seperti di gambar
MODUL PRAKTIKUM 2
Fungsi
Fungsi adalah sekumpulan perintah operasi program yang dapat menerima argumen
input dan dapat memberikan hasil output yang dapat berupa nilai ataupun sebuah hasil
operasi. Hasil akhir fungsi akan berupa sebuah nilai balik (return)
Nama fungsi yang didefinisikan sendiri oleh pemrogram tidak boleh sama dengan
nama build-in function pada compiler C++.
Fungsi digunakan agar pemrogram dapat menghindari penulisan bagian program
(kode) berulang-ulang, dapat menyusun kode program agar terlihat lebih rapi dan kemudahan
dalam debugging program. Parameter adalah nama-nama peubah yang dideklarsikan pada
bagian header fungsi. Pemrogram dapat membuat fungsi yang didefinisikan sendiri olehnya.
PROTIPE FUNGSI
Sebuah fungsi tidak dapat dipanggil kecuali sudah dideklarasikan, deklarasi fungsi dikenal
dengan sebutan prototipe fungsi. Prototipe fungsi berupa :
1. Nama Fungsi
2. Tipe nilai fungsi
3. Jumlah dan tipe argumen
Dan diakhiri dengan titik koma, sebagaimana pada pendeklarasian variabel. Sebagai
contoh:
1. long kuadrat ( long l) ;
Pada contoh pertama, fungsi kuadrat ( ) mempunyai argumen bertipe long dan nilai balik
bertipe long .
2. void garis ( );
Pada contoh kedua, fungsi garis ( ) tidakmemiliki argumen dan nilai baliknya tidak ada (
void ).
3. double maks ( double x, double y)
Pada contoh ketiga, fungsi maks( ) mempunyai dua buah argumen, dengan masingmasing argumen bertipe double.
Tugas di Rumah
1. Buat class kubus dengan property
-
Sisi
Panjang
Lebar
Tinggi
3. Gabungkan class kubus dan balok sehingga penggunaannya dapat dipilih oleh user,
seperti contoh dibawah ini :
Modul Praktikum 3
Rekursif
Perbedaan
-
Iteratif dapat berjalan pada program yang terdiri dari prosedur (Tidak terdapat fungsi)
sedangkan rekursif merupakan fungsi.
Percobaan Rekursif 1
Percobaan Rekursif 2
Tugas di Rumah
1. Buatlah Program Utuh dari fungsi faktorial dibawah ini
2. Buatlah Program Permutasi dan Kombinasi dari fungsi factorial di atas dengan aturan
a) Kombinasi N dari R= N! / ((N-R)! * R!)
Jika N<R Maka data tidak valid
b) Permutasi N dari R= N! / (N-R)!
Jika N<R maka data tidak valid
MODUL PRAKTIKUM 4
POINTER
Pointer adalah suatu variabel penunjuk, berisi nilai yang menunjuk alamat suatu lokasi
memori tertentu.
Jadi pointer tidak berisi nilai data, melainkan berisi suatu alamat memori atau null jika
tidak berisi data.
Lokasi memori tersebut bisa diwakili sebuah variabel atau dapat juga berupa nilai alamat
memori secara langsung.
Operator Pointer
Deklarai Pointer
tipe_data *nama_variabel_pointer;
Operasi Assignment
Antar variabel pointer dapat dilakukan operasi assignment.
Contoh Assigment dan sebuah alamat dapat ditunjuk oleh lebih dari
satu pointer
Contoh Mengisi variabel dengan nilai yang ditunjuk oleh sebuah variabel
pointer
Operasi aritmatika
Pada pointer dapat dilakukan operasi aritmatika yang akan menunjuk suatu alamat
memori baru.
Hanya nilai integer saja yang bisa dioperasikan pada variabel pointer.
Misal pointer X bertipe int (2 bytes), maka X+1 akan menunjuk pada alamat memori
sekarang (mis. 1000) ditambah sizeof(X), yaitu 2, jadi 1002.
Permintaan : perhatikan program diatas, Coba ganti line 14 dengan p--, amati hasilnya !
Tugas di Rumah
1. Buatlah pengembangan dari latihan terakhir (array 1D) untuk merubah isi array numbers
menjadi kelipatan 10 seperti gambar hasil running dibawah ini :
2. Sempurnakan program di bawah ini dengan mengacu contoh hasil running dibawah ini :
Hasil running :
MODUL PRAKTIKUM 5
POINTER LANJUTAN
Pemahaman Letak Deklarasi
Global
Diletakkan diatas program utama dan diluar Function.
Lokal
Diletakkan didalam program utama atau didalamFunction.
Parameter
Diletakkan didalam nama function
Pointer dan Array
Contoh Program 1
#include <iostream.h>
int my_array[] = {12,23,17,43,-5,10}; //Deklarasi Array
int *ptr;
//Deklarasi pointer
int main(void)
{
int i;
ptr = &my_array[0]; // mengarahkan pointer ke array ke 0
for (i = 0; i < 6; i++)
{
cout<<" ptr + "<< i<<" = "<< *(ptr+i)<<"\n";
}
}
Pointer dan Function
1. Variable pointer dapat didefinisikan (deklarasikan) sebagai lokal maupun global
2. Juga variable pointer dapat didefinisikan (deklarasikan) sebagai parameter didalam sebuah
function
Contoh Implementasi variabl global :
return 0;
//Deklarasi Array
//Deklarasi pointer
int main(void)
{
int i;
ptr = &my_array[0]; // mengarahkan pointer ke array ke 0
for (i = 0; i < 6; i++)
{
cout<<"my_array [ "<< i<<" ] = "<< my_array[i];
cout<<" ptr + "<< i<<" = "<< *(ptr+i)<<"\n";
}
return 0;
}
Tugas di Rumah
MODUL PRAKTIKUM 6
LINKED LIST
A. Pengantar
Pada bab sebelumnya telah dijelaskan mengenai variabel array yang bersifat statis(ukuran
danurutannya sudah pasti). Selain itu, ruang memori yang dipakai
olehnyatidak dapat
dihapus bila array tersebut sudah tidak digunakan lagi pada saat program dijalankan. Untuk
memecahkan masalah di atas, kita dapat menggunakan variable pointer. Tipe data pointer
bersifat dinamis, variabel akan dialokasikan hanya pada Saat dibutuhkan dan sesudah tidak
dibutuhkan dapat direlokasikan kembali.
B. Pengertian
Linkedlist adalah sekumpulan elemen/nilai bertipesama yang mempunyai keterurutan
keanggotaan. Berdasarkan keterurutan keanggotaan tersebut, jika diketahui Sebuah
anggota/elemen list maka dapat diketahui elemen berikutnya.
lalu
menggunakan metode double linked list. Linked list ini dikenaldengan nama Linked list
berpointer Ganda atau Double Linked List.
Langkah-langkah :
Pembuatan simpul baru
Contoh algoritmanya :
struct TNode
{
int data;
TNode *next;
};
Pembuatan struct bernama TNode yang berisi 2 field, yaitu field data bertipe integer dan
field next yang bertipe pointer dari Tnode. Setelah pembuatan struct, buat variabel head yang
bertipe pointer dari TNode yang berguna sebagai kepala linked list.
TNode *head;
Selanjutnya digunakan keyword new yang berart mempersiapkan sebuah node baru
beserta alokasi memorinya kemuadian node tersebut di isi data dan pointer nextnya
ditunjuk ken NULL.
Contohnya :
TNode *baru;
baru = new TNode;
baru->data = databaru;
baru->next = NULL;
Dalam pembuatan simpul baru jangan lupa untuk menggunakan fungsi malloc () sebagai
pointer. Fungsi ini dideklarasikan ke dalam header stdlib.h. Dengan demikian, jangan lupa
untuk meng-include header tersebut.
Contoh instruksinya :
P = (simpul*) malloc(sizeof(simpul));
Algoritmanya :
Void Buat_Simpul(int x) {
P = (simpul*) malloc(sizeof(simpul));
If (P != NULL)
{ P - > Info = x; }
Else
Cout<<Simpul gagal dibuat;
}
Bila setiap penambahan simpul pada linked list dilakukan pada bagian depan (paling dekat
dengan head) makakompleksitas yang diperlukan untuk menambah node baru dalam linked
list konstan atau O(1).
Untuk menu memasukkan data baru , digunakan bentuk algoritma seperti ini :
void insertDepan(int databaru) {
TNode *baru;
baru = new TNode;
baru->data = databaru;
baru->next = NULL;
if(isEmpty()==1)
{
head=baru;
head->next = NULL;
}
else
{
baru->next = head;
head = baru;
}
cout<<endl;
cout<< Data masuk\n;
getch();
}
if (isEmpty()==0)
{
if(head->next != NULL)
{
hapus = head;
d = hapus->data;
head = head->next;
delete hapus;
}
else
{
d = head->data;
head = NULL;
}
cout<<endl;
cout<< Data <<d<< terhapus\n;
}
else
{
cout<<endl;
cout<<endl;
cout<< Linked List Masih kosong\n;
}
getch();
}
Tugas di Rumah
Contoh program single linklist yang tambah depan dan belakang menggunakan class (tanpa
fungsi malloc):
MODUL PRAKTIKUM 7
LINKED LIST Lanjutan
Latihan Program 1
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
typedef struct simpul
{
int data;
struct simpul *lanjut;
}SIMPUL, *SIMPULPTR;
void buatsenerai(SIMPULPTR *s)
{
*s=NULL;
}
SIMPULPTR simpulbaru(int m)
{
SIMPULPTR n;
n = (SIMPULPTR)malloc(sizeof(SIMPUL));
if(n!=NULL)
{
n-> data = m;
n-> lanjut =NULL;
}
return n;
}
void sisipsenerai(SIMPULPTR *s, SIMPULPTR t, SIMPULPTR p)
{
if (p==NULL)
{
t->lanjut=*s;
*s=t;
}
else
{
t->lanjut=p->lanjut;
p->lanjut=t;
}
}
void cetaksenerai(SIMPULPTR s)
{
SIMPULPTR ps;
for (ps=s;ps!=NULL;ps=ps->lanjut)
printf(" %d --> ",ps->data);
printf("KOSONG\n");
}
int main()
{
SIMPULPTR pel;
SIMPULPTR n;
buatsenerai(&pel);
n=simpulbaru(55);
sisipsenerai(&pel,n,NULL);
n=simpulbaru(75);
sisipsenerai(&pel,n,NULL);
cetaksenerai(pel);
return 0;
}
Latihan Program 2
#include <iostream.h>
#include <stdio.h>
#include <malloc.h>
void main()
{
struct nodeku
{
int x;
struct nodeku *next;
};
struct nodeku *head=NULL,*current=NULL,*tmp=NULL;
//perulangan membuat node-node
int i;
for (i=0; i<=3; i++)
{
tmp= (struct nodeku *) malloc (sizeof(struct nodeku));
tmp -> x = i;
if (head == NULL)
{
head = tmp;
current= tmp;
} else
{
current -> next = tmp;
current = tmp;
}
}
current-> next = NULL;
//perulangan menampilkan node-node
current = head;
while (current!= NULL)
{
cout<<current -> x<<" -> ";
current = current -> next;
}
cout<<"Null\n";
//perulangan menghapus node-node
current = head->next;
head->next = NULL;
while (current != NULL)
{
tmp = current->next;
free(current);
current = tmp;
}
cout<<"List telah dihapus\n\n";
}
Tugas dirumah :
Lakukan analisa terhadap 2 program diatas, kemudian berikan kesimpulan apa saja yang
membedakan dari kedua program diatas.
MODUL PRAKTIKUM 8
QUEUE (Antrian) FIFO (First in Frist Out)
1. Definisi Queue
Queue berarti antrian, queue merupakan salah satu contoh aplikasi dari pembuatan double
linked list yang cukup sering kita temui dalam kehidupan sehari-hari, misalnya saat Anda
mengantri di loket untuk membeli tiket.Istilah yang cukup sering dipakai seseorang masuk dalam
sebuah antrian adalah enqueue. Dalam suatu antrian, yang datang terlebih dahulu akan dilayani
lebih dahulu.Istilah yang sering dipakai bila seseorang keluar dari antrian adalah dequeue.
Walaupun berbeda implementasi, struktur data queue setidaknya harus memilikioperasioperasi sebagai berikut :
EnQueue
DeQueue
Clear
IsEmptY
IsFull
2. Implementasi Queue
Implementasi Queue dengan Double Linked List
Selain menggunakan array, queue juga dapat dibuat dengan linked list. Metode
linkedlist yang digunakan adalah double linked list, operasi-operasinya:
Konstruktor
Konstruktor berguna untuk menciptakan queue yang baru dan kosong, yaitu
denganmengarahkan pointer head dan tail kepada NULL.
IsEmpty
Fungsi IsEmpty berguna untuk mengecek apakah queue masih kosong atau sudah
berisidata. Hal ini dilakukan dengan mengecek apakah head masih menunjukkan pada
Nullatau tidak. Jika benar berarti queue masih kosong.
IsFull
Fungsi IsFull berguna untuk mengecek apakah queue sudah penuh atau masih
biasmenampung data dengan cara mengecek apakah Jumlah Queue sudah sama
denganMAX_QUEUE atau belum. Jika benar maka queue sudah penuh.
EnQueue
Fungsi EnQueue berguna untuk memasukkan sebuah elemen ke dalam queue (headdan
tail mula-mula meunjukkan ke NULL).
DeQueue
Procedure DeQueue berguna untuk mengambil sebuah elemen dari queue. Hal
inidilakukan dengan cara menghapus satu simpul yang terletak paling depan (head).
Contoh Program:
Output :
Contoh program 2
Tugas di rumah
Buatlah contoh program Queue yang memiliki fungsi operasi (dibuat fungsi diluar
main): 1. Inisialisasi 2. Enqueue 3. Dequeue 4. Tampil
MODUL PRAKTIKUM 9
STACK (Tumpukan)
A. Definisi Stack
Stack adalah suatu tumpukan dari benda. Konsep utamanya adalah LIFO (Last In
FirstOut), benda yang terakhir masuk dalam stack akan menjadi benda pertama
yangdikeluarkan dari stack.
DiC++, ada dua cara penerapan prinsip stack, yakni dengan array dan linked list.
Setidaknya stack haruslah memiliki operasi-operasi sebagai berikut:
Push
: Untuk menambahkan item pada tumpukan paling atas
Pop
: Untuk mengambil item teratas
Clear
: Untuk mengosongkan stack
IsEmpty : Untuk memeriksa apakah stack kosong
IsFull : Untuk memeriksa apakah stack sudah penuh
Dalam bab ini penjelasan mengenai stack akan menggunakan kelas stack.
Kelimaoperasi stack diatas akan dideklarasikan secara abstrak dalam kelas ini,
sedangkan kelasturunan dari stack akan mengimplementasikan operasi-operasi tersebut.
B. Implementasi Stack
1. Stack dengan Array
Sesuai dengan sifat stack, pengambilan / penghapusan delemen dalam stack
harusdimulai dari elemen teratas.
Operasi-operasi pada Stcak dengan Array
a. Konstruktor
Fungsi ini membuat sebuah stack baru yang masih kosong. Konsepnya adalah
bahwaTop menunjukkan elemen stack teratas. Jika Top bernilai -1, berarti
tumpukan kosong.
b. IsFull
Fungsi ini memeriksa apakah stack yang ada sudah penuh. Stack penuh jika
stackpenuh jika puncak stack terdapat tepat dibawah jumlah maksimum yang
dapatditampung stack atau dengan kata lain Top = MAX_STACK -1.
c. Push
Fungsi ini menambahkan sebuah elemen ke dalam stack dan tidak bias dilakukan
lagijika stack sudah penuh.
d. IsEmpty
Fungsi menentukan apakah stack kosong atau tidak. Tanda bahwa stack kosong
adalahTop bernilai kurang dari nol.
e. Pop
Fungsi ini mengambil elemen teratas dari stack dengan syarat stack tidak boleh
kosong.
f. Clear
Fungsi ini mengosongkan stack dengan cara mengeset Top dengan -1. Jika Top
bernilaikurang dari nol maka stack dianggap kosong.
2. Double Stack dengan Array
Metode ini adalah teknik khusus yang dikembangkan untuk menghemat
pemakaianmemori dalam pembuatan dua stack dengan array. Intinya adalah
penggunaan hanyasebuah array untuk menampung dua stack.Tampak jelas bahwa
sebuah array dapat dibagi untuk dua stack, stack 1 bergerak ke atasdan stack 2
bergerak ke bawah. Jika Top1 (elemen teratas dari Stack 1) bertemu denganTop 2
(elemen teratas dari Stack 2) maka double stack telah penuh.Implementasi double
stack dengan array adalah dengan memanfaatkan operasi-operasiyang tidak berbeda
jauh dengan operasi single stack dengan array.
Operasi-operasi Double Stack Array
Konstruktor
Fungsi ini membuat stack baru yang masih kosong. Top[0] diset dengan -1 dan
Top[1]diset dengan MAX_STACK.
IsFull
Fungsi ini memeriksa apakah double stack sudah penuh. Stack dianggap penuh
jikaTop[0] dan Top[1] bersentuhan sehingga stack tida memiliki ruang kosong.
Dengan katalain,(Top[0] + 1) > Top[1].
Push
Fungsi ini memasukkan sebuah elemen ke salah satu stack.
IsEmpty
Fungsi memeriksa apakah stack pertama atau stack kedua kosong. Stack
pertamadianggap kosong jika puncak stack bernilai kurang dari nol, sedangkan
stack keduadianggap kosongjika puncak stack sama atau melebihiMAX_STACK.
Pop
Fungsi ini mengeluarkan elemen teratas dari salah satu stack
Clear
Fungsi ini mengosongkan salah satu stack.
3. Stack dengan Single Linked List
Selain implementasi stack dengan array seperti telah dijelasnkan sebelumnya,
ada caralain untuk mengimplementasi stack dalam C++, yakni dengan single linked
list.Keunggulannya dibandingkan array tebtu saja adalah penggunaan alokasi memori
yangdinamis sehingga menghindari pemborosan memori. Misalnya saja pada stack
denganarray disediakan tempat untuk stack berisi 150 elemen, sementara ketika
dipakai olehuser stack hanya diisi 50 elemen, maka telah terjadi pemborosan memori
untuk sisa 100elemen, yang tak terpakai. Dengan penggunaan linked list maka tempat
yangdisediakan akan sesuai dengan banyaknya elemen yang mengisi stack. Oleh
karena itupula dalam stack dengan linked list tidak ada istilah full, sebab biasanya
program tidakmenentukan jumlah elemen stack yang mungkin ada (kecuali jika sudah
dibatasi olehpembuatnya). Namun demikian sebenarnya stack ini pun memiliki batas
kapasitas,yakni dibatasi oleh jumlah memori yang tersedia.
Operasi-operasi untuk Stack dengan Linked List
Konstruktor
Fungsi ini membuat stack baru yang kosong. Stack adalah kosong jika Top
tidakmenunjuk apa pun (bernilai NULL).
IsEmpty
Fungsi memeriksa apakah stack yang adamasih kosong.
Push
Fungsi memasukkan elemen baru ke dalam stack. Push di sini mirip dengan
insertdalamsingle linked list biasa.
Pop
Fungsi ini mengeluarkan elemen teratas dari stack.
Clear
Fungsi ini akan menghapus stack yang ada.
Contoh Program:
Output :
contoh program 2
Tugas!!
Buatlah contoh program stack di atas dalam bentuk fungsi-fungsi pada setiap
operasi stack
MODUL PRAKTIKUM 10
SORTING
3. Definisi Sorting
Pengurutan (Sorting) adalah suatu proses pengurutan data yang sebelumnya disusun secara
acak atau tidak teratur menjadi urut dan teratur menurut suatu aturan tertentu. Sorting dapat
dibedakan menjadi dua jenis yaitu ascending dan descending. Ascending adalah pengurutan
data dari kecil ke besar, sedangkan descending adalah pengurutan data dari besar ke kecil.
4. Metode Pengurutan
Bubble Sort
Metode buble sort merupakan metode sederhana untuk melakukan pengurutan data. Metode
buble sort bagus gunakan dalam mengurutkan data dengan jumlah yg sedikit.
Cara kerja Pengurutan Buble short:
Pengurutan dengan mnggunakan buble short dilakukan dengan membandingkan elemen pertama
dengan elemen di sampingnya, jika elemen pertama lebih besar daripada elemen ke dua, maka
posisinya di tukar lakukan hal tersebut berulang-ulang sampai di temukan urutan yang tepat.
20
12 35
11
17 9
58
23
Dimetode bubble sort, proses pengurutan dimulai dengan membandingkan elemen pertama untuk
mendapatkan angka terbesar. Lalu angka tersebut ditempatkan pada elemen terakhir.
Sebagai langkah awal, isi elemen pertama dibandingkan dengan elemen ke-2. Jika isi elemen ke-2
lebih kecil dari elemen pertama, maka isi kedua elemen tersebut ditukar. Sehingga isi
array berubah menjadi :
12
20
35
11
17
58
23
12
20 35
11
17 9
58
23
Perbandingan selanjutnya dilakukan terhadap elemen ke-3 dengan ke-4. Karena elemen ke-4
lebih kecil, maka isi kedua elemen tersebut ditukar. Sehingga isi array sebelumnya berubah
menjadi :
12
20
11
35 17 9
58
23
Proses perbandingan seperti diatas dilakukan secara berulang sampai pada elemen terakhir.
Sehingga pada akhirnya akan dihasilkan bilangan terbesar yang ditempatkan pada posisi elemen
terakhir. Dibawah ini kondisi array setelah perbandingan elemen terakhir
12
1
20
11
17
35
23
58
Proses diatas hanya mencari bilangan terbesar pertama. Ulangi proses tersebut untuk mencari
bilangan terbesar lainnya setelah bilangan terbesar pertama tadi. Namun proses perbandingan
hanya dilakukan mulai dari elemen pertama sampai elemen ke-7. Isi elemen pertama
dibandingkan dengan elemen ke-2. Karena isi elemen ke-2 lebih besar, maka isi kedua elemen
tersebut tidak ditukar.
Kemudian elemen ke-2, dibandingkan dengan elemen ke-3. Karena elemen ke-3 lebih kecil, maka
isi kedua elemen tersebut ditukar sehingga isi array menjadi :
12
11
20
17
35
23
58
Lanjutkan proses diatas sampai pada elemen ke-7. Hasilnya isi array menjadi
12
11
17
20
23
35
58
Kini isi elemen ke-7 dan ke-8 sudah urut berdasarkan bilangan kecil ke besar. Namun elemen
lainnya belum terurut. Untuk itu ulangi proses diatas, namun elemen yang dibandingkan hanya
sampai pada elemen ke-6 saja. Setelah itu, proses perbadingan diulangi lagi sampai elemen
terakhir yang dibandingkan yaitu elemen ke-2. Hasil akhirnya menjadi :
11
12
17
20
23
35
58
Selection Sort
metode ini dikatakan kebalikan dari metode Bubble sort. Pencarian dimulai dengan bilangan
terkecil. Bilangan terkecil ini lalu diletakan di elemen atau urutan pertama, demikian
seterusnya sampai dihasilkan urutan bilangan dari kecil ke besar.
Tugas di Rumah
Buat program pengurutan data menggunakan metode bubble sort yang nantinya
hanya mengurutkan data bilangan prima saja. Contoh output program sebagai
berikut :
MODUL PRAKTIKUM 11
SORTING Lanjutan
1. Definisi Sorting
Pengurutan (Sorting) adalah suatu proses pengurutan data yang sebelumnya disusun secara
acak atau tidak teratur menjadi urut dan teratur menurut suatu aturan tertentu. Sorting dapat
dibedakan menjadi dua jenis yaitu ascending dan descending. Ascending adalah pengurutan
data dari kecil ke besar, sedangkan descending adalah pengurutan data dari besar ke kecil.
2. Metode Pengurutan
Dalam pertemuan praktikum ini akan dibahas tentang 2 metode, yaitu :
3) Exchange Sort
4) Insertion Sort
Exchange Sort
Metode pengurutan excahange sort mirip dengan metode pengurutan Buble Sort . Tapi dalam
cara membandingan antar elemennya memiliki tentu memiliki perbedaan.
Exchange sort membandingkan suatu elemen dengan elemen-elemen lainnya dalam array
tersebut, dan melakukan pertukaran elemen jika perlu. Jadi ada elemen yang selalu menjadi
elemen pusat (pivot). Sedangkan Bubble sort akan membandingkan elemen pertama/terakhir
dengan elemen sebelumnya/sesudahnya, kemudian elemen tersebut itu akan menjadi pusat (pivot)
untuk dibandingkan dengan elemen sebelumnya/sesudahnya lagi, begitu seterusnya
Insertion Sort
Pengurutan dengan penyisipan (insertion sort) adalah suatu metode yang melakukan pengurutan
dengan cara menyisipkan data yang belum urut ke dalam bagian data yang telah diurutkan.
Konsep ini biasa dilakukan pada permainan kartu. Mirip dengan cara orang mengurutkan kartu,
selembar demi selembar kartu diambil dan disisipkan (insert) ke tempat yang seharusnya.
Pengurutan dimulai dari data ke-2 sampai dengan data terakhir, jika ditemukan data yang lebih
kecil, maka akan ditempatkan (diinsert) diposisi yang seharusnya. Pada penyisipan elemen, maka
elemen-elemen lain akan bergeser ke belakang
Tugas di Rumah
Buat program pengurutan data menggunakan metode Exchange sort yang
nantinya hanya mengurutkan data bilangan prima saja. Contoh output program
sebagai berikut :
MODUL PRAKTIKUM 12
SEARCHING
Searching Data
Didalam modul ini kita akan membahas proses pencarian / searching data pada suatu array /
barisan data. Sebagai contoh sederhana :
Apabila diketahui ada sebuah array / barisan data bernama A yang menampung 10 data yang
bertipe integer sbb A={1,2,3,4,8,5,7,9,6,0} dan kita diberi tugas untuk mencari beberapa data
misal:
Jika data yang akan dicari dalam array A adalah 6, maka dengan cepat dapat kita
ketahui bahwa data 6 ada dalam array A pada index ke-9 (index pada array dimulai
dari 0).
Sedangkan jika data yang akan dicari dalam array A adalah 12, maka dapat
disimpulkan bahwa array A tidak memiliki data 12 tersebut.
Bisa diambil kesimpulan, kita sudah memahami proses pencarian data yang sederhana
tersebut
dalam
pikiran
kita,
sekarang
permasalahannya
adalah
bagaimana
Sequensial search
Metodenya seperti ini..
1. User diminta menentukan banyaknya data yang akan diinputkan
2. User menginputkan data sebanyak yang telah ditentukan pada langkah pertama
3. User diminta memasukkan data yang dicari
4. Program melakukan perulangan, mencari data yang dicari
5. Pada akhir perulangan ada 2 kondisi
5.1 Data yang tidak dicari tidak ditemukan
5.2 Data yang dicari ditemukan, kemudian tampilkan posisinya
Secara garis besarnya seperti itulah Algortima yang digunakan pada metode Sequential
Search. Dapat disimpulkan bahwa sequential search, akan mencari data dengan cara
membandingkannya satu-persatu dengan data yang ada. Prosesnya tentu saja akan
singkat jika data yang diolah sedikit, dan akan lama jika data yang diolah banyak.
Disarankan proses ini digunakan pada jumlah data yang sedikit saja.
Binary search
Algoritma yang digunakan pada metode Binary seperti dibawah ini :
1. User diminta menentukan banyaknya data yang akan diinputkan
2. User menginputkan data sebanyak yang telah ditentukan pada langkah pertama
3. User diminta memasukkan data yang dicari
4. Mengurutkan data jika data belum terurut
5. User diminta memasukkan data yang dicari
6. Menentukan nilai tengah array
7. Pengecekan apakah nilai array pada index tengah sama dengan data yang dicari
8. Jika sama, data yang dicari ditemukan
8.1 jika tidak, periksa apakah data yang dicari lebih kecil dari nilai tengah
8.1.1 jika true lakukan pencarian dari i=0 sampai i=nilai tengah
8.2 jika 8.1 bernilai false berarti data yang dicari lebih besar dari nilai tengah
8.2.1 lakukan pencarian mulai dari i=nilaitengah+1 sampai data terakhir
9. Tampilkan hasil pencarian
Secara garis besarnya seperti itulah Algortima yang digunakan pada metode Binary Search.
Proses pencarian binary search hanya dapat dilakukan pada kumpulan data yang sudah
diurutkan terlebih dahulu. Jika terdapat N buah data yang akan dolah, data yang dicari akan
dibandingkan dengan data ke-N jika data ke-N lebih besar dari data yang dicari maka akan
dilakukan pembagian data menjadi dua bagian. Kemudian ujung data pada setiap bagian
dibandingkan lagi dengan nilai yang akan dicari.
Bedanya metode Sequential dan Binary adalah keadaan datanya. Jika Sequential data tidak
terurut pun bisa, namun jika menggunakan Binary data harus dalam keadaan urut.
Contoh Program Binary
search
Tugas di Rumah
Rancanglah program menggunakan metode sequensial untuk mencari huruf x dari sederatan
array berikut B C x E X A a H X x B
Berikan ulasan anda atas hasil program tersebut.
MODUL PRAKTIKUM 13
Review Materi 1
Dalam pertemuan ini, setiap mahasiswa mampu menyelesaikan masalah dengan memadukan
beberapa materi secara komprehensif, yaitu :
1. Pendefinisian tipe data
2. Penggunaan operator
3. Perulangan data dengan array
4. Penggunaan fungsi logika dan perulangan
5. Penyimpanan data kedalam suatu file
Catatan :
Rancanglah suatu program dengan studi kasus yang anda tentukan sendiri. Materi atau studi kasus
boleh
anda
unduh
dari
internet
tetapi
dengan
catatan
anda
tetap
harus
mampu
mempertanggjawabkan bahwa anda sangat memahami alur pikiran atau logika dari masalah yang
anda unduh tersebut.
Studi kasus yang anda selesaikan harus memiliki kandungan materi diatas ( 5 materi)
Baris program yang anda susun minimal sebanyak 2 halaman folio spasi 1 font size 12.
MODUL PRAKTIKUM 14
Review Materi 2
Dalam pertemuan ini, setiap mahasiswa mampu menyelesaikan masalah dengan memadukan
beberapa materi secara komprehensif, yaitu :
1. Penyusunan baris program dalam suatu function
2. Paket function dalam suatu file header
3. Penyimpanan data kedalam suatu file
Catatan :
Rancanglah suatu program dengan studi kasus yang anda tentukan sendiri. Materi atau studi kasus
boleh
anda
unduh
dari
internet
tetapi
dengan
catatan
anda
tetap
harus
mampu
mempertanggjawabkan bahwa anda sangat memahami alur pikiran atau logika dari masalah yang
anda unduh tersebut.
Seluruh function yang anda definisikan, harus dikemas kedalam beberapa file header.
Studi kasus yang anda selesaikan harus memiliki kandungan materi diatas ( 3 materi)
Baris program yang anda susun minimal sebanyak 2 halaman folio spasi 1 font size 12.