Contents Modul 1: Flowchart & PseudoCode ............................................................................................... 3
Modul 2: Pengantar Bahasa JAVA ............................................................................................... 12
Modul 3: Java Matrik .................................................................................................................... 20
Modul 4: Sorting ........................................................................................................................... 24
Modul 5: Binary Sorting dan Searching ....................................................................................... 30
Buku Ajar & Panduan Praktikum STRUKTUR DATA
Tujuan, 1. Mahasiswa dapat memahami alur algoritma pemrograman menggunakan flowchart dan
pseudocode
2. Mahasiswa dapat mengimplementasikan Mahasiswa dapat mengimplementasikan
pemrograman Java dan Tools pendukungnya untuk menyelesaikan program komputasi.
Modul Praktikum, 1. Flowchart dan Pseudocode
2. Pengantar Bahasa Java
3. Array dan matriks
4. Sorting
5. Binary Searching dan Sorting
6. Threading
Kebutuhan Software, 1. Java IDE :Netbeans Minimum V.6.0 atau Java Creator
2. Microsoft office atau Visio
3. Java Minimum SDK V.1.6 (direkomendasikan JDK keluaran SUN Oracle)
Modul 1: Flowchart & PseudoCode Tujuan Instruksi Khusus:
• Mahasiswa dapat memahami penggunaan standar diagram flowchart
• Mahasiswa dapat memahami penggunaan diagram flowchart untuk alur algoritma
Teori
1.1 Diagram Logika Flowchart
Untuk menggambarkan alur logika dalam komputasi digunakan standar dasar pemodelan
yaitu menggunakan flowchart. Flowchart menunjukkan aliran proses dari awal sampai
penyelesaian komputasi. Dalam standar yang lebih kompleks flowchart juga dapat dimodelkan
dalam Unified Modelling Language (UML) yaitu menggunakan diagram activity. Dimana
diagram activy adalah flowchart yang melibatkan berbagai interaksi pengguna ataupun domain
sistem.
Standar model flowchart,
Simbol Proses lojik
Process
Menunjukkan tahapan berjalannya proses
komputasi
Predefined
Process
Menunjukkan subproses atau subrutin dari
berjalannya proses, atau proses didalam
proses
Preparation
Menunjukkan langkah perulangan dari
aliran suatu proses
Decision
Menunjukkan alternatif pemilihan
keputusan proses
Alternate
Menunjukkan proses alternatif yang bisa
digunakan diluar proses normal
Delay
Menunjukan penundaan proses
Manual Operation
Menunjukkan proses manual yang
dilakukan oleh pengguna
Simbol Koneksi
Flow
Menunjukkan arah dan hubungan antar
proses
Terminator
Menunjukkan akhir selesainya
keseluruhan proses
Connector
Menunjukkan hubungan antar bagian
proses yang terputus
Or
Menunjukkan proses yang berbeda
Sum
Menunjukkan campuran proses yang bisa
berjalan bersamaan
Merge
Menunjukan penggabungan proses
Extract
Menunjukkan pemisahan
Simbol Input-Output
Data
Memberikan parameter input dan
menghasilkan output (I/O)
Manual Input
Input manual
Display
Menunjukkan tampilan di Layar
Document
Menunjukkan output dokumen manual
1.2 Flowchart Algoritma
Untuk menunjukkan proses algoritma pemrograman sehingga mudah untuk dimengerti
dapat menggunakan standar flowchart.
Percabangan,
Percabangan Kondisi
Terpenuhi?
Aksi 1
Aksi lain
Y
T
a
b
Contoh logika,
• Jika suhu panas pakailah T-Shirt berwarna cerah, Jika suhu dingin pakailah jaket
berwarna gelap.
Perulangan
Contoh logika,
• Selama 10 jam belajarlah didepan laptop untuk menguasai pemrograman.
• Sejauh 10 langkah kedepan cobalah lihat kanan-kiri untuk mencari kunci motormu
yang hilang.
Kondisi Terpenuhi
Aksi
Y
T
Selama Kondisi
b
c
Contoh implementasi,
Dari masukan bilangan bulat 1..10 tentukan keluaran bilangan ganjil, dan genap.
Mulai
Masukan bilangan bulat input 1..10
input modulus 2 == 0 ?
Masukkan daftar bilangan genap
Y
T
Selama Kondisi input
1 10
Input <= 10 ?
Tampilkan bilangan genap
Tampilkan bilangan ganjil
Masukkan daftar bilangan ganjil
Selesai
1.3 PseudoCode
Pseudocode adalah metode penulisan bahasa inggris sederhana yang merepresentasikan
lojik algoritma pemrograman. Pseudo berarti tiruan, sedangkan Code adalah kode program
sehingga pseudocode bisa disebut sebagai kode tiruan dari program sebenarnya yang dituliskan
dalam standar bahasa inggris untuk mendekatkan dengan perintah-perintah yang terdapat pada
bahasa pemrograman.
Pada dasarnya struktur pseudocode hanya dibagi atas 6 perintah yaitu :
1. Sequence, memiliki cakupan perintah yang luas untuk perintah eksekusi proses,contoh
diantara kata kunci yang sering digunakan
Input: READ, OBTAIN, GET
Contoh: READ height; READ Weights; OBTAIN range; GET radius
Output: PRINT, DISPLAY, SHOW
Perhitungan: COMPUTE, CALCULATE, DETERMINE
Inisialisasi: SET, INIT
Counter: INCREMENT, DECREMENT, DELAY
2. While, digunakan untuk menyatakan perulangan dengan pengujian kondisi diawal (*lebih
sesuai untuk perulangan tanpa batas yang tetap)
Contoh:
WHILE condition
Sequence
ENDWHILE
3. If-Then-Else, digunakan untuk menyatakan persyaratan lojik kebenaran atau disebut
BOOLEAN.
Contoh:
IF condition THEN
sequence 1
ELSE
sequence 2
ENDIF
4. Repeat-Until, digunakan untuk menyatakan perulangan dengan pengujian kondisi akhir.
Contoh:
REPEAT
Sequence
UNTIL condition
5. For, digunakan untuk menyatakan perulangan dengan batasan range sejumlah angka
tertentu.
Contoh:
FOR count=0 TO 10 DO sequence
ENDFOR
6. Case, digunakan untuk pilihan kondisi tertentu,
Contoh:
CASE grade OF
“A” : points = 4
“B” : points = 3
“C” : points = 2
“D” : points = 1
“F” : points = 0
ENDCASE
*Aturan dasar Penulisan pseudocode:
• Lebih mudah gunakan huruf kapital untuk menyatakan fungsi atau prosedur
• Gunakan huruh kecil untuk penulisan variable
Contoh pseudocode untuk memasak Indomie Goreng:
BEGIN
SET flavour IN plate
OBTAIN pan WITH 1l OF water
SET pan IN stove
BURN-UP stove
DELAY 30 Seconds
SET indomie IN pan
FOR 1..5 MINUTE DO
STIR-UP indomie
ENDFOR
FILTER indomie AND water
SET indomie IN plate
REPEAT
MIX indomie AND flavour
UNTIL average
END
Instruksi Praktikum,
1. Pelajari teori terkait pembahasan, gunakan pemodelan sederhana dengan menggunakan
M. Word untuk membuat flowchart
Tugas Pendahuluan,
1. Jawablah Pertanyaan berikut terkait algoritma:
Apa yang dimaksud persyaratan kondisi...?, apa perbedaan pada penggunaan
IF-THEN-ELSE dengan CASE. Ilustrasikan kondisi yang sesuai untuk
penggunaan kedua pseudocode tersebut.
Apa yang dimaksud dengan perulangan, jelaskan perbedaan pada perulangan
dengan menggunakan WHILE, REPEAT-UNTIL dan FOR. Ilustrasikan
kondisi yang sesuai untuk penggunaannya.
Tugas Praktikum,
1. Buatlah Flowchart dan PseudoCode untuk algoritma deret faktorial sebagai berikut,
faktorial(5) = 1*2*3*4*5
2. Buatlah Flowchart dan PseudoCode untuk algoritma membuat Omlet Telur.
3. Buatlah Flowchart dan Pseudocode untuk proses disekeliling anda yang anda ketahui.
Modul 2: Pengantar Bahasa JAVA Tujuan Instruksi Khusus:
• Mahasiswa dapat memahami penggunaan dasar bahasa pemrograman JAVA
• Mahasiswa dapat mentranslasikan flowcart dan pseudocode kedalam bahasa
pemrograman JAVA
Bahasa pemrograman yang dijadikan implementasi eksekusi algoritma dalam praktikum ini
adalah bahasa JAVA. Bahasa JAVA pada dasarnya adalah bahasa pemrograman berbasis obyek,
namun dalam praktikum ini penggunaan obyek diminimalisir.
Konsep dasar JAVA yang perlu dikuasai pada modul ini adalah:
1. Pengenalan Tipe Data
2. Lojik persyaratan dan perulangan
Teori
1.1 Pengenalan Tipe Data
Tipe data merupakan jenis ukuran dan tipe dari register memori yang digunakan oleh variabel untuk menyimpan nilai operan tertentu didalam program. Bentuk dasar tipe data dibagi atas dua jenis yaitu:
1. Tipe data Primitif,
Tipe data Primitif mulai dikenal pada bahasa pemrograman prosedural seperti: Pascal, C,
atau Basic.
Dimana tipe data ini memiliki ukuran memori yang tetap dan pasti, diantaranya:
m
• Integer : byte (8 byte), short (16 b), int (32 b), long (64 b)
• Floating point: float (32 byte), double(64 b), decimal(128 b), bigDecimal(256
b)
• Booleans: boolean(1 bit)
• Characters: char(1 byte)
2. Tipe data komplek,
Yang digunakan pada praktikum ini hanya koleksi array, matriks dan List. Array dan
matriks adalah tipe data koleksi atau deret kelompok yang bersifat statis sedangkan List
bersifat dinamis.
Array,
public class array {
public static void main(String[] arg){
int index = 10;
int [] ary= new int[index];
ary[0] = 1;
ary[1] = 2;
ary[3] = 100;
System.out.println("Array indeks keempat menyimpan nilai
"+ary[3]);
}
}
public class Primitif {
public static void main(String[] args) {
String s = "Hello Java, I Love You ....";
char c = 'a';
int i = 1;
double f = 0.5;
double d = i/f;
System.out.println("Hasil Bagi "+i+" : "+f+" = "+d);
}
}
Matriks,
List,
public class Listi {
public static void main(String[] args) {
List<Integer> l = new ArrayList();
l.add(1);
l.add(2);
l.add(1000);
for (Integer i : l) {
System.out.print(i);
}
}
}
public class Matriks {
public static void main(String[] arg){
int bar = 10;
int kol = 10;
double [][] matrik = new double[bar][kol];
matrik[0][0] = 1;
matrik[0][1] = 0;
matrik[1][0] = 0;
matrik[1][1] = 1;
}
}
1.2 Lojik Percabangan dan Perulangan
Percabangan Lojik percabangan digunakan untuk menentukan pilihan aliran program yang akan dieksekusi sesusi dengan kondisi yang ditentukan. Terdapat dua kombinasi percabangan yaitu IF-THEN-ELSE dan Switch-Case, contoh: IF-THEN-ELSE
import java.util.ArrayList;
import java.util.List;
public class percabangan {
public static void main(String[] args) {
List<Integer> genap = new ArrayList<>();
List<Integer> ganjil = new ArrayList<>();
for(int i=0; i<=100; i++){
if(i%2==0){
System.out.println("genap");
genap.add(i);
}
else{
System.out.println("ganjil");
ganjil.add(i);
}
}
System.out.println("Daftar bilangan genap: ");
for(Integer i:genap){
System.out.println(i+",");
}
System.out.println("Daftar bilangan ganjil: ");
for(Integer i:ganjil){
System.out.println(i+",");
}
}
}
Switch-Case
public class switchcase {
public static void main(String[] args) {
int month = 6;
String monthString;
switch (month) {
case 1: monthString = "January";
break;
case 2: monthString = "February";
break;
case 3: monthString = "March";
break;
case 4: monthString = "April";
break;
case 5: monthString = "May";
break;
case 6: monthString = "June";
break;
case 7: monthString = "July";
break; // etc etc
default: monthString = "Invalid month";
break;
}
System.out.println(monthString);
}
}
Perulangan Terdapat tiga perulangan yang dapat digunakan di JAVA yaitu: While, do..While, dan For. While
Do-While
public class dowhile {
public static void main(String args[]){
int x = 10;
do{
System.out.print("value of x : " + x );
x++;
System.out.print("\n");
}while( x < 20 );
}
}
public class whileloop {
public static void main(String args[]) {
int x = 10;
while( x < 20 ) {
System.out.print("value of x : " + x );
x++;
System.out.print("\n");
}
}
}
For
Instruksi Praktikum,
1. Pelajari teori terkait pembahasan, jalankan program contoh di Java IDE Netbeans
Tugas Pendahuluan,
1. Jawablah Pertanyaan berikut terkait penulisan bahasa java:
• Sintaks apa sebagai pembatas BEGIN-END di Java
• Apa perbedaan operator “=” dan”==” di JAVA
• Apa perbedaan FOR statis dan FOR dinamis
2. Buatlah translasi dari flowchart preparation&decision kedalam penulisan program bahasa
java
3. Apa yang dimaksud dengan koleksi, sebutkan dan jelaskan tipe data koleksi tersebut...!
Tugas Praktikum,
1. Buatlah program JAVA untuk algoritma deret faktorial sebagai berikut,
faktorial(5) = 1*2*3*4*5
faktorial(4) = 1*2*3*4
faktorial(3) = 1*2*3
2. Buatlah program interaksi dengan input dan output untuk algoritma membuat Omlet
Telur.
3. Buatlah program sebagaimana kasus pada modul 1 yang anda tentukan sendiri.
public class forloop {
public static void main(String args[]) {
for(int x = 10; x < 20; x = x+1) {
System.out.print("value of x : " + x );
System.out.print("\n");
}
}
}
Modul 3: Java Matrik Tujuan Instruksi Khusus:
• Mahasiswa dapat memahami penggunaan algoritma pengolahan data matriks
Bahasa pemrograman yang dijadikan implementasi eksekusi algoritma dalam praktikum ini
adalah bahasa JAVA. Bahasa JAVA pada dasarnya adalah bahasa pemrograman berbasis obyek,
namun dalam praktikum ini penggunaan obyek diminimalisir.
Konsep dasar JAVA yang perlu dikuasai pada modul ini adalah:
1. Konsep array
2. Lojik perulangan
3. Pengenalan fungsi
Teori
3.1 Pengertian Matriks
Matriks adalah himpunan scalar dengan susunan segi empat siku-siku. Bilangan-bilangan dalam susunan tersebut dinamakan entri dalam matriks. Jika A adalah sebuah matriks, maka
akan menggunakan aij untuk menyatakan entri yang terdapat di dalam baris i dan kolom j dari matriks A. Secara umum matriks dituliskan sebagai berikut:
3.2 Operasional Matriks Penjumlahan Matriks
Operasional Penjumlahan matriks hanya bisa dilakukan untuk atriks dengan ukuran dimensi yang sama. Jika A dan B adalah sembarang dua matriks yang ukurannya sama, maka jumlah adalah matriks yang diperoleh dengan menambahkan bersama-sama entri yang bersesuaian dalam kedua matriks tersebut.
Contoh:
Perkalian Matriks
Perkalian matriks hanya dapat dilakukan untuk matriks sembarang dengan dimensi kolom matriks pertama sama dengan baris matriks berikutnya. Sedangkan hasil perhalian adalah penjumlahan antar perkalian entri baris matriks pertama dengan kolom matriks berikutnya. Contoh:
Perkalian entri antara baris dengan kolom: Baris ke-1 x kolom ke-1, X11 = (1.2) + (3.3) + (4.1) = 15 Baris ke-1 x kolom ke-2, X12 = (1.4) + (3.6) + (4.3) = 34 Baris ke-2 x kolom ke-1, X21 = (3.2) + (2.3) + (5.1) = 17 Baris ke-2 x kolom ke-2, X22 = (3.4) + (2.6) + (5.3) = 39
3.3 Matriks Java Matriks dijava direpresentasikan dalam array dua dimensi,
tipe_data [ ][ ] variable = new tipe_data[ukuran baris][ukuran kolom] contoh:
3.4 Fungsi dan Prosedur Fungsi dalam bahasa pemrograman adalah bagian struktur sub-program atau sub-rutin atau
dalam standar flowchart adalah predefined process yang memiliki kegunaan secara spesifik. Pembuatan fungsi dan prosedur digunakan untuk meningkan reusabilitas fungsi program, sehingga penulisan program dapat lebih efisien ketika digunakan kembali. Secara garis besar pembeda fungsi dan prosedur hanya ada dan tidak adanya nilai kembalian, dimana fungsi memiliki nilai kembalian sedangkan prosedur tidak. Fungsi Contoh:
public double[][] entri_matriks(){
int m = this.bar;
int n = this.kol;
double [][] r = new double[bar][kol];
for(int i=0; i<m; i++){
for(int j=0; j<n; j++){
System.out.print("Masukan Baris ke-"+i+" Kolom ke-"+j+" =");
Scanner s = new Scanner(System.in);
double x = s.nextInt();
r[i][j] = x;
}
}
return r;
}
public class Matriks {
public static void main(String[] arg){
int bar = 10;
int kol = 10;
double [][] matrik = new double[bar][kol];
matrik[0][0] = 1;
matrik[0][1] = 0;
matrik[1][0] = 0;
matrik[1][1] = 1;
}
}
Prosedur
Instruksi Praktikum,
1. Pelajari teori terkait pembahasan, jalankan program contoh di Java IDE Netbeans
Tugas Pendahuluan,
1. Jawablah Pertanyaan berikut terkait penulisan bahasa java:
• Apa itu fungsi ? kapankah fungsi secara tepat digunakan
• Apa itu prosedur ? kapankah prosedur secara tepat digunakan
• Apa persamaan dan perbedaan antara larik dan matrik
Tugas Praktikum,
1. Buatlah flowchart dan pseudocode Penjumlahan matrik
2. Buatlah program dengan komponen fungsi dan prosedur untuk penjumlahan matrik
3. Buatlah program dengan komponen fungsi dan prosedur untuk perkalian matrik
public void show_matriks(double[][] matrik){
for(int i=0; i<this.bar; i++){
System.out.print("|");
for(int j=0; j<this.kol; j++){
System.out.print(" "+matrik[i][j]);
}
System.out.println("|");
}
}
Modul 4: Sorting Tujuan Instruksi Khusus:
• Mahasiswa dapat memahami penggunaan sorting pada data array
Pemilihan pengunaan algoritma sangat menentukan efisiensi baik pada penggunaan ruang meori
maupun kecepatan komputasi. Pada modul ini mahasiswa mempelajari beragam algoritma
sorting yang menentukan kecepatan komputasi yang diperlukan saat eksekusi program.
Konsep dasar JAVA yang perlu dikuasai pada modul ini adalah:
1. Array
2. Preparation & decision
3. Void
Teori
Pengertian Sorting
Sorting merupakan salah satu algoritma terpenting dalam pengolahan data. ditujukan untuk
mengurutkan data sesuai dengan nilai yang terdapat pada tiap-tiap indeks. Sorting dibagi menjadi
dua pola yaitu ascending yang terurut dari nilai terkecil sampai nilai terbesar dan descending
yang terurut terbalik dari besar ke kecil.
Sedangkan metode sorting yang dipelajari adalah sorting dasar pada data primitif array
yang terdiri atas bubble sorting, selection sorting, insertion sorting. Dari ke-3 algoritma sorting
ini dilakukan analisa untuk mengukur kinerja kecepatan dari masing-masing algoritma.
Bubble Sorting, Merupakan algoritma sorting yang paling sederhana dengan melakukan pertukaran data
antar indeks pada keseluruan indeks secara terus-menerus sampai tidak terjadi pertukaran yang
menandakan semua data yang tersimpan telah terurut.
Contoh operasional bubble sort descending
4 2 3 5 1 6
4 3 5 2 6 1
4 5 3 6 2 1
5 4 6 3 2 1
5 6 4 3 2 1
6 5 4 3 2 1
Procedure BubbleSort(array OF number)
BEGIN
WHILE (flag IS TRUE)
SET flag IS FALSE
FOR j = 0 TO Length of array DO
IF number [j] < number [j+1] THEN
temp = number [j]
number [j] = number [j+1]
number [j+1] = temp
flag = true
ENDIF
ENDFOR
ENDWHILE
END
Insertion Sorting, Merupakan algoritma sorting dengan melokalisir deret yang disorting, sehingga pada deret
array akan dibagi menjadi dua yaitu: area tersorting dan area tidak tersorting.
Contoh operasional insertion sort descending
key
4 2 3 5 1 6
4 2 3 5 1 6
4 3 2 5 1 6
5 4 3 2 1 6
5 4 3 2 1 6
6 5 4 3 2 1
Procedure InsertionSort(array OF number)
BEGIN
SET i,j,key as number
FOR j = 1 TO Length of array DO
key = number [ j ]
FOR i = j-1 DOWN TO 0 AND number [ i ] < key DO
number [i + 1] = number [ i ]
ENDFOR
number [i + 1] = key
ENDFOR
END
Selection Sorting, Merupakan algoritma sorting yang mengkombinasikan pencarian dan pengurutan. Pada
pengurutan descending pertukaran dilakukan dengan melakukan pencarian indeks nilai terkecil,
setelah didapatkan nilai terkecil ditempatkan pada posisi indeks yang terakhir dan berlaku
sebaliknya untuk ascending.
Procedure SelectionSort(array OF number)
BEGIN
SET i, j, first, temp is number
FOR i = length OF array DOWN TO 1 DO
first = 0
FOR j = 1 TO i DO
IF (number [ j ] < number [ first] )
first = j
ENDIF
temp = number[ first ]
number[ first ] = number[ i ];
number[ i ] = temp;
ENDFOR
ENDFOR
END
Contoh operasional insertion sort descending
first
4 2 3 5 1 6
first
4 6 3 5 1 2
first
4 6 5 3 1 2
first
4 6 5 3 2 1
first
5 6 4 3 2 1
first
6 5 4 3 2 1
Untuk mendapatkan lama waktu berjalanya program dapat digunakan program pendeteksi awal
dan start program dalam skala timemillis contoh dengan kecepatan nano-time.
long now = System.nanoTime();
{algorithm}
long after = System.nanoTime();
long delta_time = after-now;
Instruksi Praktikum,
1. Pelajari teori terkait pembahasan, jalankan program contoh di Java IDE Netbeans
Tugas Pendahuluan,
1. Jawablah Pertanyaan berikut :
• Apakah efisiensi kecepatan kompilasi dan menjalankan program dipengaruhi oleh
algoritma ?
• Apakah ruang memori yang dialokasikan untuk menjalankan program juga
dipengaruhi oleh algoritma ?
2. Bagaimana cara bisa mengukur kecepatan suatu algoritma program dan bisa
membandingkannya dengan algoritma program lainnya ?
Tugas Praktikum,
1. Buatlah program java yang mempraktikan algoritma sorting Bubble, Insertion dan
Selection !
2. Buatlah program untuk menguji kecepatan algoritma tersebut untuk mensorting
10,100,1000,10000, dan 1000000 data integer acak. Buatlah table perbandingan
kecepatan masing-masing sorting Bubble, Insertion dan Selection.
3. Manakah yang terbaik untuk ketiga algoritma sorting tersebut?
Modul 5: Binary Sorting dan Searching Tujuan Instruksi Khusus:
• Mahasiswa dapat memahami penggunaan sorting dan searching pada data array secara
binary serta penerapan metode rekursif
Konsep dasar JAVA yang perlu dikuasai pada modul ini adalah:
1. Metode
2. Rekursif
Teori
Binary Sorting
Sorting sebelumnya menerapkan algoritma sekuensial dalam melakukan pengurutan
dimana analisa time complexity bigO dari algoritma tersebut cenderung N2 dari jumlah data N,
maka untuk berikutnya digunakan pendekatan sorting secara binary untuk mengurangi bigO
menjadi Nlog2N.
Untuk algoritma yang kompleks pada operasional binary, metode rekursif sangat efektif
untuk mengganti operasi perulangannya. Metode rekursif menggantikan perulangan dengan
melakukan pemanggilan method secara berulang sampai ditemukan solusi terkecil yang
merupakan akhir dari sebuah permasalahan perulangan.
Algoritma Iteratif dan Rekursif Untuk menyelesaikan permasalahan perulangan didalam algoritma
pemrograman dapat menggunakan dua metode yaitu iteratif dan rekursif. Iteratif
merupakan penyelesaian umum untuk penyelesaian perulangan baik untuk
perulangan dengan batasan pasti menggunakan statemen For ataupun tanpa batasan
pasti menggunakan While. Berbeda dengan iteratif, rekursif tidak memiliki statemen
penggunaan perulangan tetapi perulangan dilakukan dengan pemanggilan methode
secara berulang sampai ditemukan solusi dasar dari sebuah permasalahan.
Contoh untuk menyelesaikan permasalahan faktorial sederhana berikut dapat
dibedakan solusi untuk iteratif dan rekursif.
Persamaan n! = faktorial(n) :
Untuk solusi faktorial menggunakan iteratif dapat ditentukan sebagaimana
algoritma berikut pada Gambar 1.
Gambar 1, Listing program solusi faktorial secara iteratif
Sedangkan solusi faktorial menggunakan rekursif dapat ditentukan sebagaimana
algoritma berikut pada Gambar 2.
public int iteration(int n){
int result=1;
if(n==0){
return result;
}
else{
for(int i=n; i>0; --i){
result *= i;
}
}
return result;
}
Gambar 2, Listing program solusi faktorial secara rekursif
Secara umum setiap permasalahan perulangan dapat dilakukan secara iteratif
maupun rekursif, namun dari efektivitas program memiliki kecenderungan
bahwasanya untuk solusi permasalahan yang sederhana, proses yang kecil serta
penyelesaian dengan batasan pasti direkomendasikan untuk menggunakan iteratif.
Sedangkan untuk solusi permasalahan yang komplek dan tanpa batasan pasti
menggunakan rekursif.
Binary Sorting (Quick Sort)
Algoritma pengurutan yang menerapkan metode binary adalah Quick Sort. Pengurutan
menggunakan Quick sort dilakukan dengan membagi deret menjadi dua bagian kiri dan kanan
oleh pivot. Untuk operasional ascending, dimana bagian kiri dianggap kumpulan nilai yang lebih
kecil dari pivot dan kanan lebih besar dari pivot. Apabila terdapat nilai yang lebih besar pada
bagian kiri maka perlu ditukar dengan bagian kanan dari pivot atau sebaliknya. Proses dilakukan
secara rekursif sampai pergeseran nilai indeks kiri lebih besar dari indeks kanan yang
menandakan semua telah terurut.
i pivot j
6 5 4 3 2 1
i pivot j
1 5 4 3 2 6
i pivot j
1 5 4 3 2 6
i,pivot j
1 2 4 3 5 6
public int recursion(int n){
if(n==0){
return 1;
}
else
return n * recursion(n-1);
}
i,pivot j
1 2 4 3 5 6
i,pivot j
1 2 3 4 5 6
i, pivot, j
1 2 3 4 5 6
Listing program Java Quick Sort
public class QuickSorting {
public void asc(int[] data, int left, int right) {
int pivot = data[left + (right - left) / 2];
int i = left;
int j = right;
while (i <= j) {
while (data[i] < pivot) {
i++;
}
while (data[j] > pivot) {
j--;
}
if (i <= j) {
int temp=data[i];
data[i]=data[j];
data[j]=temp;
i++;
j--;
}
}
if(left < j)
asc(data,left,j);
if(i < right)
asc(data,i,right);
}
}
Binary Searching
Algoritma binary searching pada array hanya bisa diimplementasikan pada data yang sudah
terurut. Dimana pencarian dilakukan dengan membagi data berdasarkan pivot indeks tengah
sampai ditemukan atau pencarian berhenti karena indeks kiri > dari indeks kanan yang
menandakan tidak ditemukannya data.
Cari nilai 5 didalam data,
i pivot j
1 2 3 4 5 6
i pivot j
1 2 3 4 5 6
i, pivot j
1 2 3 4 5 6
i pivot j
1 2 3 4 5 6
pivot ditemukan data yang dicari
1 2 3 4 5 6
Instruksi Praktikum,
1. Pelajari teori terkait pembahasan, jalankan program contoh di Java IDE Netbeans
Tugas Pendahuluan,
1. Jawablah Pertanyaan berikut :
• Apa yang dimaksud dengan perulangan secara Rekursif ?
• Kapan rekursif sesuai untuk digunakan daripada menggunakan iterative ?
• Apa perbedaan kecepatan kompleksitas waktu bigO antara operasional sekuensial
dengan binary?
Tugas Praktikum,
1. Buatlah program java yang mempraktikan algoritma sorting Quck Sort dan Mergesort.
2. Buatlah program binary searching secara iteratif dan rekursif.
Referensi 1. Mark A l l e n Weiss. Data Structures and Algorithm Analysis in Java, Florida
International University, Pearson 2012.
2. Michael T. Goodrich, Roberto Tamassia. Data Structures and Algorithms in Java
Fifth Edition International Student Version , Department of Computer Science
University of California, Irvine, John Willey & Son 2011.
3. Mathbits.com, http://mathbits.com/MathBits/Java/arrays/arrays.htm, Diakses
11/11/2013.