LABORATORIUM PEMBELAJARAN ILMU KOMPUTER FAKULTAS ILMU KOMPUTER UNIVERSITAS BRAWIJAYA
BAB NAMA NIM TANGGAL ASISTEN
: SORTING (PENGURUTAN) : LUQMAN RIZKY DHARMAWAN DHARMAWAN : 165150700111010 165150700111010 : 28/11/2017 : ILHAM ROMADHONA
A. DEFINISI MASALAH
1. Buatlah program sorting bubble sort dengan menggunakan linked list untuk mengurutkan angka angka 54, 94, 32, 2, 10 dan 10. 2. Buatlah program sorting dengan menggunakan menggunakan merge sort, quick sort, dan insertion sort untuk mengurutkan angka 29, 27, 10, 8, 76 dan 21, tentukan waktu eksekusi tiap jenis sorting tersebut, kemudian simpulkan jenis sorting mana yang memiliki waktu eksekusi tercepat info: menentukan waktu eksekusi dapat menggunakan fungsi dari System.currentTimeMillis()
B. SOURCE CODE BubbleSort.java
1
package ASD12;
2 3
class Node { int data;
4 5 6
7 8 9 10 11
Node next, prev; public Node(int data) { this.data = data; } } public class BubbleSort { private Node pAwal, pAkhir; private int counter; public BubbleSort() { pAwal = pAkhir = null;
12
counter = -1; }
13 14 15 16 17 18 19 20 21 22 23 24
public boolean isEmpty(){ return pAwal == null; } public void SisipDataDiAwal(int dt) { Node pBaru = new Node(dt); if (isEmpty()) { pAwal = pAkhir = pBaru; pBaru.next = pAwal; pBaru.prev = pAkhir; counter = 0; } else { pAwal.prev = pBaru; pBaru.next = pAwal;
25 26
pAwal = pBaru; pAwal.prev = pAkhir;
27
pAkhir.next = pAwal;
28
counter++; } } public void bubbleSort() {
29 30 31 32 33
int tmp; for (int i = 0; i < counter; i++) { for (int j = counter; j > i; j--) { if (pAkhir.prev.data > pAkhir.data && pAkhir != pAwal){
34 35
tmp = pAkhir.data; pAkhir.data = pAkhir.prev.data;
36
pAkhir.prev.data = tmp; }
37
pAkhir = pAkhir.prev; } pAkhir = pAkhir.prev.prev;
38
} System.out.println("Setelah Sorting : "); for (int k = 0; k <= counter; k++) { System.out.print(pAwal.data + " ");
39 40 41 42
pAwal = pAwal.next; }
43
System.out.println(""); } }
MergeSort.java 1 2 3 4 5 6
package ASD12; public class MergeSort { private int[] angka; private int[] bantu; private int number; public void sort(int[] nilai) {
7 8 9
this.angka = nilai; number = nilai.length; this.bantu = new int[number];
10
mergesort(0, number - 1);
11
} private void mergesort(int low, int high) {
12 13 14 15 16
if (low < high) { int middle = low + (high - low) / 2; mergesort(low, middle); mergesort(middle + 1, high); merge(low, middle, high); } }
17 18
private void merge(int low, int middle, int high) { for (int i = low; i <= high; i++) {
19
bantu[i] = angka[i]; }
20
int i = low;
21 22 23 24
int j = middle + 1; int k = low; while (i <= middle && j <= high) { if (bantu[i] <= bantu[j]) {
25 26 27
angka[k] = bantu[i]; i++; } else {
28 29
angka[k] = bantu[j]; j++; } k++;
30
} while (i <= middle) {
31 32 33 34
angka[k] = bantu[i]; k++; i++; } } public static void printArray(int array[]) { int n = array.length;
35 36 37 38
for (int i = 0; i < n; ++i) { System.out.print(array[i] + " ");
39
} System.out.println(); } }
QuickSort.java 1 2 3 4 5
package ASD12; public class QuickSort { private int[] data; int[] L = {29, 27, 10, 8, 76, 21}; public void sort() {
6 7 8
this.data = L; quicksort(0, L.length - 1); for (int i = 0; i < L.length; i++) {
9
System.out.print(L[i] + " "); } }
10 11 12 13 14 15 16 17
private void quicksort(int low, int high) { int i = low, j = high; int value = data[low + (high - low) / 2]; while (i <= j) { while (data[i] < value) { i++; } while (data[j] > value) { j--;
} if (i <= j) {
18 19
int temp = data[i];
20 21 22 23
data[i] = data[j]; data[j] = temp; i++; j--; } } if (low < j) {
24 25
quicksort(low, j); }
26 27
if (i < high) { quicksort(i, high); } } }
InsertionSort.java 1 2
package ASD12; public class InsertionSort {
3 4 5 6 7 8 9
int[] L = new int[7]; void insertionSort() { int k, temp, j; L[1] = 29; L[2] = 27; L[3] = 10; L[4] = 8;
10 11
L[5] = 76; L[6] = 21;
12 13 14 15
for (k = 1; k <= 6; k++) { temp = L[k]; j = k - 1; while (temp <= L[j]) {
16 17
L[j + 1] = L[j]; j--;
18 19
} if ((temp >= L[j]) || (j == 1)) { L[j + 1] = temp;
20 21 22
} else { L[j + 1] = L[j]; L[j] = temp; } } System.out.println("Setelah Sorting : "); for (int i = 1; i <= 6; i++) { System.out.print(L[i] + " "); }
23 24 25 } }
Main.java 1 2
package ASD12; import static ASD12.MergeSort.printArray;
3 4 5
public class MainClass { public static void main(String[] args) { BubbleSort bubblesorter = new BubbleSort();
6 7
int[] dataBubble = {54, 94, 32, 2, 10, 10}; for (int i = 0; i < dataBubble.length; i++) {
8
bubblesorter.SisipDataDiAwal(dataBubble[i]); } System.out.println("BubbleSort LinkedList"); System.out.println("Sebelum Sorting:");
9 10 11 12
for (int i = 0; i < dataBubble.length; i++) { System.out.print(dataBubble[i]+" "); }
13 14
System.out.println(""); bubblesorter.bubbleSort();
15 16
System.out.println(""); int dataMerge[] = {29, 27, 10, 8, 76, 21};
17 18
MergeSort merge = new MergeSort(); System.out.println("MergeSort LinkedList");
19 20 21
System.out.println("Before Sorting :"); for (int i = 0; i < dataMerge.length; i++) { System.out.print(dataMerge[i]+" ");
22 23
} System.out.println(""); merge.sort(dataMerge);
24 25 26
System.out.println("After Sorting : "); printArray(dataMerge); System.out.print("Waktu Eksekusi : ");
27 28 29
System.out.println(System.currentTimeMillis()); System.out.println(""); QuickSort quickSorter= new QuickSort();
30 31 32 33 34 35 36
System.out.println("QuickSort LinkedList"); System.out.println("Hasil Sorting : "); quickSorter.sort(); System.out.print("\nWaktu Eksekusi : "); System.out.println(System.currentTimeMillis()); System.out.println(""); System.out.println("InsertionSort LinkedList");
37
InsertionSort insertionsorter = new InsertionSort();
38 39 40
insertionsorter.insertionSort(); System.out.print("\nWaktu Eksekusi : "); System.out.println(System.currentTimeMillis()); } }
C. PEMBAHASAN
BubbleSort.java 1 Deklarasi Package ASD12 2 Deklarasi class Node 3 Deklarasi variabel data bertipe integer 4 Deklarasi variabel next dan prev yang bertipe Node 5 Deklarasi constructor dari class Node dengan parameter int data 7 Deklarasi class BubbleSort 10 Deklarasi constructor dari class BubbleSort 11 Deklarasi variabel pAwal dan pAkhir yang bertipe Node 12 Deklarasi variabel counter bertipe integer 13 Deklarasi method isEmpty yang digunakan untuk mengecek apakah pAwal bernilai null atau tidak 15 Deklarasi method SisipDataDiAwal berparameter int dt yang digunakan untuk menyisipkan node pada head 29 Deklarasi method bubbleSort yang digunakan untuk mengurutkan data dengan cara membandingkan masing-masing elemen MergeSort.java 1 Deklarasi Package ASD12 2 Deklarasi class MergeSort 3 Deklarasi variabel angka bertipe integer yang merupakan array 4 Deklarasi variabel bantu bertipe integer yang merupakan array 5 Deklarasi variabel number bertipe integer 6 Deklarasi method sort berparameter int[] nilai yang digunakan untuk mensorting menggunakan metode merge 11 Deklarasi method mergesort berparameter int low,int high yang digunakan untuk mengecek nilai awal dan akhir 17 Deklarasi method merge berparameter int low,int middle,int high yang digunakan untuk melakukan penukaran nilai pada merge 35 Deklarasi method printArray berparameter int array[] yang digunakan untuk mencetak array QuickSort.java 1 Deklarasi Package ASD12 2 Deklarasi class QuickSort 3 Deklarasikan variabel array dengan nama data bertipe integer 4 Deklarasikan sekaligus inisialisasi variabel array L bertipe integer dengan nilai 29, 27, 10, 8, 76, 21 5 Deklarasikan method sort yang digunakan untuk mensorting dengan metode quick 10 Deklarasikan method quicksort berparameter int low,int high yang digunakan untuk membagi bagian pada low dan high InsertionSort.java 1 Deklarasi Package ASD12 2 Deklarasi class InsertionSort 3 Deklarasikan sekaligus inisialisasi variabel array L bertipe integer
4
Deklarasikan method insertionSort yang digunakan untuk pengurutan dengan metode penyisipan langsung
MainClass.java 1 Deklarasi Package ASD 12 2 Import method printArray 3 Deklarasi MainClass 4 Method Main 5 Instansiasi objek dengan nama bubbleSorter dari class BubbleSort 6 Deklarasi variabel data bertipe integer dan array dan diinisialisasi dengan nilai 54, 94, 32, 2, 10, 10 7 Fungsi perulangan dengan i sama dengan 0 , i kurang dari panjang data dan increment pada variabel i 8 Memanggil method SisipDataDiAwal dari objek bubblesorter dengan parameter variabel data indeks ke-i 9 Mencetak BubbleSort LinkedList 10 Mencetak Sebelum Sorting 11 Fungsi perulangan dengan i sama dengan 0 , i kurang dari panjang data dan increment pada variabel i 12 Mencetak nilai dari variabel data indeks ke-i 13 Mecetak baris kosong 14 Memanggil method bubbleSort dari objek bubblesorter 15 Mencetak Baris Kosong 16 Deklarasi sekaligus inisialisasi variabel data bertipe integer yang merupakan array dengan nilai 29, 27, 10, 8, 76, 21) 17 Instansiasi objek dengan nama merge dari class MergeSorter 18 Mencetak MergeSort LinkedList 19 Mencetak BeforeSorting : 20 Fungsi perulangan dengan i sama dengan 0 , i kurang dari panjang dari variabel data , increment pada variabel i 21 Mencetak nilai dari variabel data indeks ke-i 22 Mencetak baris kosong 23 Memanggil method sort dari objek merge dengan variabel data sebagai parameternya 24 Mencetak "After Sorting : " 25 Memanggil method printArray dengan variabeldata sebagai parameternya 26 Mencetak instruksi "Waktu Eksekusi : " 27 Mencetak instruksi yang isinya memanggil fungsi System.currentTimeMillis() 28 Mencetak baris kosong 29 Instansiasi objek dengan nama quickSorter dari class QuickSort 30 Mencetak QuickSort LinkedList 31 Mencetak Hasil Sorting: 32 Memanggil method sort dari objek quickSorter 33 Mencetak "\nWaktu Eksekusi : " 34 Mencetak instruksi yang isinya memanggil fungsi System.currentTimeMillis() 35 Mencetak baris kosong 36 Mencetak InsertionSort LinkedList 37 Instansiasi objek dengan nama insertionsorter dari class InsertionSorter 38 Memanggil method insertionSort dari objek insertionsorter 39 Mencetak "\nWaktu Eksekusi : "
40
Mencetak instruksi yang isinya memanggil fungsi System.currentTimeMillis()
D. SCREENSHOT PROGRAM
E. KESIMPULAN
Sorting atau pengurutan data merupakan suatu proses untuk menyusun sebuah himpunan obyek dengan aturan tertentu. Penerapan s orting dapat ditemui ketika mencari suatu data, apabila data tersebut sudah urut maka pencarian data akan lebih mudah. Proses sorting memiliki banyak jenis, yaitu : - Bubble sort Proses pengurutan metode bubble sort ini menggunakan dua loop. Loop pertama melakukan pengulangan dari elemen ke 2 sampai dengan elemen ke N-1 (misalnya variable i), sedangkan Loop kedua melakukan pengulangan menurun dari elemen ke N sampai elemen ke i (misalnya variable j). Pada setiap pengulangan, elemen ke j-1 dibandingkan dengan elemen ke j. Apabila data ke j-1 lebih besar daripada data ke j, dilakukan penukaran. - Selection Sort
-
Metode seleksi melakukan pengurutan dengan cara mencari data yang terkecil/terbesar kemudian menukarkannya dengan data yang digunakan sebagai acuan atau sering dinamakan pivot Insertion Sort Pengurutan dimulai dari data ke-2 sampai dengan data terakhir, jika ditemukan data yang lebih kecil, maka akan ditempatkan (diinser t) di posisi yang seharusnya