5. Operasional searching paten oleh Ir. Achmad Fauzan HS, MT.
Praktikum Searching)
-
Upload
ahmad-ghozali-rizal -
Category
Documents
-
view
412 -
download
1
Transcript of Praktikum Searching)
5/12/2018 Praktikum Searching) - slidepdf.com
http://slidepdf.com/reader/full/praktikum-searching 1/14
PRAKTIKUM ALGORITMA DAN STRUKTUR DATA
MODUL KE-6
ALGORITMAPENCARIAN DAN PENGURUTAN
LABORATORIUM PEMROGRAMAN
PROGRAM STUDI TEKNIK INFORMATIKA
FAKULTAS TEKNIK
UNIVERSITAS MUHAMMADIYAH MALANG
2011
5/12/2018 Praktikum Searching) - slidepdf.com
http://slidepdf.com/reader/full/praktikum-searching 2/14
I. TUJUANMahasiswa mampu :
1. Memahami algoritma pencarian (linear search dan binary search)
2. Menerapkan algoritma pencarian kedalam pemrograman3. Memahami algoritma pengurutan (insertion sort, selection sort, bubble sort, merge sort)
4. Menerapkan algoritma pengurutan kedalam pemrograman
II. ALAT YANG DIGUNAKANPeralatan yang digunakan :
1. Perangkat PC yang terinstall Java
2. Editor Java
III. DASAR TEORIBeberapa metode pengurutan data dalam java :
1. Buble short
Merupakan salah satu dari banyak teknik pengurutan (sort) yang paling sering dan paling
sederhana. Seperti namanya, bubble yang berarti gelembung, teknik ini diibaratkan
seperti gelembung. Ia menggeser nilai terkecil atau terbesar (tergantung jenisnya,
ascending atau descending) ke ujung. Algoritma Bubble Sort ini cukup simpel, semisal
pengurutan secara ascending (kecil ke besar)
ia membandingkan nilai petama dengan nilai kedua, apabila nilai pertama lebih kecil berarti tidak ada perubahan. Namun apabila nilai kedua lebih kecil daripada nilai
pertama, maka nilai kedua pindah ke nilai pertama dan nilai pertama pindah ke urutan
kedua. Setelah melakukan pengecekan, berlanjut ke pengecekan nilai kedua dan ketiga
dengan cara yang sama dengan diatas, begitu seterusnya…
Dibawah ini ilustrasinya..
2. Insertio Short
Salah satu algoritma sorting yang paling sederhana adalah insertion sort . Ide
dari algoritma ini dapat dianalogikan seperti mengurutkan kartu. Penjelasan berikut ini
menerangkan bagaimana algoritma insertion sort bekerja dalam pengurutan kartu.
5/12/2018 Praktikum Searching) - slidepdf.com
http://slidepdf.com/reader/full/praktikum-searching 3/14
Anggaplah anda ingin mengurutkan satu set kartu dari kartu yang bernilai paling kecil
hingga yang paling besar. Seluruh kartu diletakkan pada meja, sebutlah meja ini sebagai
meja pertama, disusun dari kiri ke kanan dan atas ke bawah. Kemudian kita mempunyai
meja yang lain, meja kedua, dimana kartu yang diurutkan akan diletakkan. Ambil
kartu pertama yang terletak pada pojok kiri atas meja pertama dan letakkan pada meja
kedua. Ambil kartu kedua dari meja pertama, bandingkan dengan kartu yang berada
pada meja kedua, kemudian letakkan pada urutan yang sesuai setelah perbandingan.
Proses tersebut akan berlangsung hingga seluruh kartu pada meja pertama telah
diletakkan berurutan pada meja kedua.
Algoritma insertion sort pada dasarnya memilah data yang akan diurutkan
menjadi dua bagian, yang belum diurutkan (meja pertama) dan yang sudah diurutkan
(meja kedua). Elemen pertama diambil dari bagian array yang belum diurutkandan kemudian diletakkan sesuai posisinya pada bagian lain dari array yang telah
diurutkan. Langkah ini dilakukan secara berulang hingga tidak ada lagi elemen yang
tersisa pada bagian array yang belum diurutkan.
3. Selection short
Jika anda diminta untuk membuat algoritma sorting tersendiri, anda mungkin akan
menemukan sebuah algoritma yang mirip dengan selection sort. Layaknya insertion
sort, algoritma ini sangat rapat dan mudah untuk diimplementasikan.
Mari kita kembali menelusuri bagaimana algoritma ini berfungsi terhadap satu
paket kartu. Asumsikan bahwa kartu tersebut akan diurutkan secara ascending.
Pada awalnya, kartu tersebut akan disusun secara linier pada sebuah meja dari kiri ke
kanan, dan dari atas ke bawah. Pilih nilai kartu yang paling rendah, kemudian
tukarkan posisi kartu ini dengan kartu yang terletak pada pojok kiri atas meja. Lalu cari
kartu dengan nilai paling rendah diantara sisa kartu yang tersedia. Tukarkan kartu yang
baru saja terpilih dengan kartu pada posisi kedua. Ulangi langkah – langkah tersebut
hingga posisi kedua sebelum posisi terakhir dibandingkan dan dapat digeser dengan
kartu yang bernilai lebih rendah.
Ide utama dari algoritma selection sort adalah memilih elemen dengan nilai
paling rendah dan menukar elemen yang terpilih dengan elemen ke-i. Nilai dari i
dimulai dari 1 ke n, dimana n adalah jumlah total elemen dikurangi 1.
4. Merger Short
Prinsip utama yang diimplementasikan pada algoritma merge-sort seringkali disebut
sebagai pecah-belah dan taklukkan ( bahasa Inggris: divide and conquer ). Cara kerja
5/12/2018 Praktikum Searching) - slidepdf.com
http://slidepdf.com/reader/full/praktikum-searching 4/14
algoritma merge sort adalah membagi larik data yang diberikan menjadi dua bagian
yang lebih kecil. Kedua larik yang baru tersebut kemudian akan diurutkan secara
terpisah. Setelah kedua buah list tersusun, maka akan dibentuk larik baru sebagai hasil
penggabungan dari dua buah larik sebelumnya. Menurut keefektifannya, alogaritma ini
bekerja dengan tingkat keefektifan O(nlog(n)). Dalam bentuk pseudocode sederhana
algoritma ini dapat dijabarkan sebagai berikut:
public static void mergesort(int[ ] data, int first, int n){
int n1;
int n2;
if (n > 1) {
n1 = n / 2;
n2 = n - n1;
mergesort(data, first, n1);
mergesort(data, first + n1, n2);
merge(data, first, n1, n2);
}}
private static void merge(int[ ] data, int first, int n1, int n2) {
int[ ] temp = new int[n1+n2];
int copied = 0;
int copied1 = 0;
int copied2 = 0;
int i;
while ((copied1 < n1) && (copied2 < n2)){
if (data[first + copied1] < data[first + n1 + copied2])
temp[copied++] = data[first + (copied1++)];
else
temp[copied++] = data[first + n1 + (copied2++)];}
while (copied1 < n1)
temp[copied++] = data[first + (copied1++)];
while (copied2 < n2)
temp[copied++] = data[first + n1 + (copied2++)];
for (i = 0; i < n1+n2; i++)
data[first + i] = temp[i];
}
IV. PROSEDUR PELAKSANAANProsedur pelaksanaan praktikum adalah sebagai berikut :
1. Mahasiswa mencoba latihan yang ada pada modul praktikum
2. Mahasiswa menganalisa hasil dari program pada latihan yang telah dijalankan
3. Mahasiswa mengerjakan tugas yang diberikan
4. Mahasiswa mendemonstrasikan program yang telah dikerjakan pada dosen/assisten
5. Mahasiswa membuat laporan dari tugas yang telah dikerjakan
6. Upload laporan melalui e-labit.umm.ac.id
5/12/2018 Praktikum Searching) - slidepdf.com
http://slidepdf.com/reader/full/praktikum-searching 5/14
V. LATIHAN
ALGORITMA PENCARIAN
1. Linear atau Sequential Search
import java.util.Arrays;import java.util.Scanner;import static java.lang.Math.*;
public class SequentialSearch{
public static void main(String args[]){
Scanner sc = new Scanner(System.in);int j, k, number, size;boolean found = false;System.out.print("Enter the array size: ");
size = sc.nextInt();int[] intArray = new int[size];for (j=0; j<size; j++)
intArray[j] = (int) (random()*100);System.out.println(" " + size + " element int array of random ints between 0 and 99 has
been loaded.");System.out.println("The random array for verification is:\n\n");System.out.println(Arrays.toString(intArray));System.out.println("\nGuess one of the numbers: ");number = sc.nextInt();//// linear search algorithmk=0;while (!found && k<size)
if (intArray[k]==number)
found=true;elsek +=1;
System.out.println();
if (found)System.out.println("Found in position " + k);
elseSystem.out.println("The number is not found");
/////////////////////////
}}
2. Binary Search
class OrdArray{private long[] a; // ref to array aprivate int nElems; // number of data items//-----------------------------------------------------------public OrdArray(int max) // constructor{a = new long[max]; // create arraynElems = 0;}//-----------------------------------------------------------
public int size(){ return nElems; }//-----------------------------------------------------------public int find(long searchKey){
5/12/2018 Praktikum Searching) - slidepdf.com
http://slidepdf.com/reader/full/praktikum-searching 6/14
int lowerBound = 0;int upperBound = nElems-1;int curIn;while(true){curIn = (lowerBound + upperBound ) / 2;if(a[curIn]==searchKey)return curIn; // found it
else if(lowerBound > upperBound)return nElems; // can’t find itelse // divide range{if(a[curIn] < searchKey)lowerBound = curIn + 1; // it’s in upper half elseupperBound = curIn - 1; // it’s in lower half } // end else divide range} // end while} // end find()//-----------------------------------------------------------public void insert(long value) // put element into array{
int j;for(j=0; j<nElems; j++) // find where it goesif(a[j] > value) // (linear search)break;for(int k=nElems; k>j; k--) // move bigger ones upa[k] = a[k-1];a[j] = value; // insert itnElems++; // increment size} // end insert()//-----------------------------------------------------------public boolean delete(long value){int j = find(value);if(j==nElems) // can’t find it
return false;else // found it{for(int k=j; k<nElems; k++) // move bigger ones downa[k] = a[k+1];nElems--; // decrement sizereturn true;}} // end delete()//-----------------------------------------------------------public void display() // displays array contents{for(int j=0; j<nElems; j++) // for each element,System.out.print(a[j] + " "); // display it
System.out.println("");}//-----------------------------------------------------------} // end class OrdArray///////////////////////////////////////////////////////////////class OrderedApp{public static void main(String[] args){int maxSize = 100; // array sizeOrdArray arr; // reference to arrayarr = new OrdArray(maxSize); // create the arrayarr.insert(77); // insert 10 itemsarr.insert(99);arr.insert(44);arr.insert(55);arr.insert(22);arr.insert(88);arr.insert(11);
5/12/2018 Praktikum Searching) - slidepdf.com
http://slidepdf.com/reader/full/praktikum-searching 7/14
arr.insert(00);arr.insert(66);arr.insert(33);arr.display(); // display itemsint searchKey = 99; // search for itemSystem.out.println("Search key " + searchKey);if( arr.find(searchKey) != arr.size() )System.out.println("Found " + searchKey);
elseSystem.out.println("Can’t find " + searchKey);} // end main()} // end class OrderedApp
ALGORITMA PENGURUTAN
3. Contoh class untuk algoritma pengurutan selection sort
public class selectionSort {
static int X[]={7,3,4,1,8,2,6,5};sttaic void selectionSort(){
int i,min,j,t;int n = X.length;
for (i=0; i < n; i++) {
min = i;for (j = i+1; j < n; j++) {
if (X[min] > X[j]){min = j;
}}if(min!=i){
t = X[min];X[min] = X[i];X[i] = t;}
}}
public static void main(String[] args){
cetak();System.out.println();selectionSort();cetak();System.out.println();
}}
4. Contoh method untuk algoritma pengurutan Insertion Sort
void insertionSort(){
int i=1,t,j;int n= X.length;for(i=1;i<n;i++){
t=X[i];for (j =i-1; j >= 0; j--) {
if (t < X[j]){
X[j+1] = X[j];X[j]=t;}else {
5/12/2018 Praktikum Searching) - slidepdf.com
http://slidepdf.com/reader/full/praktikum-searching 8/14
X[j+1] = t;break;
}}
}}
5. Contoh method untuk algoritma pengurutan Bubble Sort
void bubbleSort(){
boolean status = true;int i,j,tmp;int n = X.length;
for (i=0; i < n-1 && status; i++){status = false;for (j=n-1; j > i; j--) {
if (X[j] < X[j-1]) {tmp = X[j];X[j] = X[j-1];
X[j-1] = tmp;status = true;
}}
}}
6. Contoh method untuk algoritma pengurutan Merge Sort
void mergeSort(int l,int r){
if(l==r) return;
else{int mid = (l+r)/2;
mergeSort(l, mid);mergeSort(mid+1,r);Merging(l,mid+1,r);
}}
static void Merging(int kiri,int tengah, int kanan){
int j=0;
int batasBawah = kiri;int mid = tengah-1;
int n=kanan-batasBawah+1;int tampung[] = new int[X.length];
while(kiri <=mid && tengah <= kanan){
if(X[kiri] < X[tengah])tampung[j++]=X[kiri++];
elsetampung[j++]=X[tengah++];
}
while(kiri<=mid){tampung[j++]=X[kiri++];
}
while(tengah<=kanan){tampung[j++]=X[tengah++];
}
5/12/2018 Praktikum Searching) - slidepdf.com
http://slidepdf.com/reader/full/praktikum-searching 9/14
for(int i=0;i<n;i++){
X[batasBawah+i]=tampung[i];}
}
VI. TUGAS PRAKTIKUM
1. (1 orang) Gabungkan ke-4 algoritma pengurutan diatas. Buatlah menu yang memberikan
pilihan kepada user jenis pengurutan dan algoritma yang dikehendaki. Deret bilangan
yang akan diurutkan didapat dari input user.
Contoh tampilan :
Jumlah data yang dikehendaki : 5
Masukkan data 1 : 5
Masukkan data 2 : 8
Masukkan data 3 : 2
Masukkan data 4 : 9
Masukkan data 5 : 1
Algoritma pengurutan:
1. bubble
2. selection
3. insertion
4. merge
Masukkan pilihan algoritma : 2
Metode pengurutan :
1. ascending
2. descending
Masukka pilihan : 2
Hasil pengurutan : 9 8 5 2 1
2. (2 orang) Modifikasi contoh program yang ada pada latihan. Buatlah program yang
dapat mengurutkan sejumlah data berupa karakter. Anda dapat mengambil salah satu
algoritma pengurutan yang paling anda kuasai.
Contoh :
Data : d r g a z y m
Hasil pengurutan :
Ascending : a d g m r y z
5/12/2018 Praktikum Searching) - slidepdf.com
http://slidepdf.com/reader/full/praktikum-searching 10/14
Descending : z y r m g d a
*2 orang masing-masing mengerjakan untuk algoritma yang berbeda.
3. (2 orang) Gabungkan seluruh algoritma pengurutan diatas. Bangkitkan bilangan secara
acak dengan jumlah bilangan yang dibangkitkan berturut-turut adalah : 100, 1000,
10000, 100000, 1000000. Lakukan pengurutan secara ascending. Kemudian lakukan
analisa terhadap running time (T(n)) untuk jumlah perbandingan dari tiap algoritma.
Analisa hasilnya dan berikan kesimpulan algoritma mana yang paling kecil jumlah
perbandingannya!
Untuk menganalisa hasil percobaan diatas lengkapi tabel berikut :
Percobaan Algoritma Jumlah Data (n)Banyak
perbandinganSelection Sort 10 45
Insertion Sort 21
Bubble Sort 42
Merge Sort 23
1 Selection Sort 100 ….
Insertion Sort …..
Bubble Sort …..
Merge Sort .......
2 Selection Sort 1000 ….
Insertion Sort …..
Bubble Sort …..
Merge Sort .......
3 Selection Sort 10000 ….
Insertion Sort …..
Bubble Sort …..
Merge Sort .......
4 Selection Sort 100000 ….
Insertion Sort …..
Bubble Sort …..
Merge Sort .......
5 Selection Sort 1000000 ….Insertion Sort …..
Bubble Sort …..
Merge Sort .......
VII. HASIL PRAKTIKUMJawaban soal no. 1 package Prkatikum6;
import java.util.*;
public class soal1 {
static int[] data ;
5/12/2018 Praktikum Searching) - slidepdf.com
http://slidepdf.com/reader/full/praktikum-searching 11/14
public soal1(int max){
data = new int[max];
}
void print(){
for (int i=0;i<data.length;i++){
System.out.print(" " + data[i]);
}
}
public static void mergesort(int[ ] data, int first, int n){
int n1;
int n2;
if (n > 1) {
n1 = n / 2;
n2 = n - n1;
mergesort(data, first, n1);
mergesort(data, first + n1, n2);
merge(data, first, n1, n2);
}}
private static void merge(int[ ] data, int first, int n1, int n2) {
int[ ] temp = new int[n1+n2];
int copied = 0;
int copied1 = 0;
int copied2 = 0;
int i;
while ((copied1 < n1) && (copied2 < n2)){
if (data[first + copied1] < data[first + n1 + copied2])
temp[copied++] = data[first + (copied1++)];
elsetemp[copied++] = data[first + n1 + (copied2++)];
}
while (copied1 < n1)
temp[copied++] = data[first + (copied1++)];
while (copied2 < n2)
temp[copied++] = data[first + n1 + (copied2++)];
for (i = 0; i < n1+n2; i++)
data[first + i] = temp[i];
}
void insertionSort(){
int i=1,t,j;
int n= data.length;
for(i=1;i<n;i++){
t=data[i];
for (j =i-1; j >= 0; j--) {
if (t < data[j]){
data[j+1] = data[j];
data[j]=t;
}
else {
data[j+1] = t;
break;
}
5/12/2018 Praktikum Searching) - slidepdf.com
http://slidepdf.com/reader/full/praktikum-searching 12/14
}
}
}
void bubbleSort(){
boolean status = true;
int i,j,tmp;
int n = data.length;
for (i=0; i < n-1 && status; i++){
status = false;
for (j=n-1; j > i; j--) {
if (data[j] < data[j-1]) {
tmp = data[j];
data[j] = data[j-1];
data[j-1] = tmp;
status = true;
}
}
}}
void des(){
boolean status = true;
int i,j,tmp;
int n = data.length;
for (i=0; i < n-1 && status; i++){
status = false;
for (j=n-1; j > i; j--) {
if (data[j] > data[j-1]) {
tmp = data[j];
data[j] = data[j-1];
data[j-1] = tmp;status = true;
}
}
}
}
void selectionSort(){
int i,min,j,t;
int n = data.length;
for (i=0; i < n; i++) {
min = i;for (j = i+1; j < n; j++) {
if (data[min] > data[j]){
min = j;
}
}
if(min!=i){
t = data[min];
data[min] = data[i];
data[i] = t;
}
}
}
public static void main(String[] args){
5/12/2018 Praktikum Searching) - slidepdf.com
http://slidepdf.com/reader/full/praktikum-searching 13/14
Scanner scan = new Scanner(System.in);
int pl3;
System.out.println("Program Pengurutan Data");
System.out.println("========================\n");
System.out.print("masukkan jumlah data yang ingin diurutkan!");
int jmldata = scan.nextInt();
soal1 x = new soal1(jmldata);
for (int i=0;i<jmldata;i++){
System.out.print("Masukkan data ke "+(i+1)+" : "); data[i]=scan.nextInt();
}
do{
System.out.println("\nData yang telah di masukkan!");
x.print();
System.out.print("\n\n");
//Algoritma pengurutan
System.out.println("Algoritam Pengurutan :");
System.out.println("1. Buble");
System.out.println("2. Selection");
System.out.println("3. Insection");
System.out.println("4. Merge");
System.out.print("Masukkan pilihan : ");int pl1 =scan.nextInt();
if (pl1==1){
x.bubbleSort();
x.print();
}else if(pl1==2){
x.selectionSort();x.print();
}else if(pl1==3){
x.insertionSort();
x.print();
}else if(pl1==4){
x.mergesort(data,0,data.length);
x.print();
}else{
System.out.println("Pilihan tidak ada!");
}
//Metode pengurutanSystem.out.println("\n\n");
System.out.println("Metode Pengurutan :");
System.out.println("1. Ascending");
System.out.println("2. Descending");
System.out.print("Masukkan pilihan : ");int pl2 =scan.nextInt();
if (pl2==1){
x.bubbleSort();
}else if(pl2==2){
x.des();
x.print();
System.out.println("\n");
}else{
System.out.println("Pilihan tidak ada!");
}
5/12/2018 Praktikum Searching) - slidepdf.com
http://slidepdf.com/reader/full/praktikum-searching 14/14
System.out.println("Ingin menjalan program kembali 1 = Y dan 0 = N : ");pl3=scan.nextInt();
}while(pl3!=0);
}
}
Screanshort soal 1
VIII. Kesimpulan
Modul 6 praktikum ini adalah modul yang terahkir dalam praktek matakuliah
ASD, menerangkan berberapa metode pengurutan data yang diantanyaranya adalah
buble short, selection short, insection short dan merger short. Semua dari metode ini
sama yaitu mengurutkan data entah data itu string,chat, atau integer, tetapi penerapan
yang lebih mendalam adalah untuk menyelesaikan masalah berdasarkan jumlah datanya,
tentu hal ini akan teruji efisiensi dari masing-masing metode. Selain hal tersebut di
dalam metode terdapat metode pengurutan data dari terkecil ke data yang terbesar yaitu
atau sering disebut ascending dan sebaliknya descending .