modul asd minggu 4 elementary...
TRANSCRIPT
Modul ASD Minggu 4
Elementary Sorting
Pada modul ini, dibahas dua implementasi algoritma sorting, yaitu selection sort dan insertion
sort. Selain itu, pada modul ini juga dibahas penggunaan sorting yang disediakan java
menggunakan Array.sort.
Agar lebih mudah mengerti, cobalah untuk melakukan hal-hal berikut ini:
1. Bacalah terlebih dahulu ide dasar dari masing-masing algoritma.
2. Jika Anda sudah memahami idenya, cobalah untuk menuliskan pseudocode dari masing-masing
algoritma. Anda dapat mencocokkan pseudocode yang Anda buat dengan pseudocode yang ada
di bawah ini. Pseudocode yang Anda mungkin saja sedikit berbeda dengan yang diberikan namun
bukan berarti itu tidak tepat.
3. Setelah menuliskan pseudocode dan memastikan bahwa pseudocode tersebut benar, cobalah
untuk mengimplementasikan pseudocode tersebut dalam Java.
A. Selection Sort
1. Ide dasar dan Pseudocode
Ide dasar dari selection sort adalah memilih sebuah elemen kemudian menempatkannya pada
awal/akhir daerah yang terurut. Misalnya akan dilakukan sorting terhadap sebuah array A sehingga semua
elemen dalam A akan terurut menaik, maka:
a. Pertama-tama yang dilakukan adalah memilih elemen terkecil lalu tukar posisinya dengan A[1].
Dengan demikian sudah terdapat daerah terurut, yaitu pada indeks ke- 1.
b. Selanjutnya, pilih elemen terkecil kedua dan tukarkan posisinya dengan A[2].
c. Lakukan hal ini untuk n-1 elemen pertama yang ada pada A. Dengan kata lain, lakukan hal ini
sampai hanya tersisa 1 elemen pada A.
Perhatikan ilustrasi di bawah ini untuk lebih jelasnya.
31 19 7 -1 25 64 100 10
Kondisi awal dari array A.
i
min
-1 7 10 19 25 31 100 64
-1 7 10 19 25 31 64 100 Kondisi akhir array A
Berikut ini adalah pseudocode untuk selection sort untuk mengurutkan elemen-elemen pada array
secara non-decreasing.
1. input: unsorted array A with length=n
2.
output: increasingly sorted array A with length=n
3. SELECTION_SORT(A)
4. for i=1 to n-1 do
5. idxmin=i
6. for j=i+1 to n do
7. if A[j]<A[idxmin] then
8. idxmin=j
9. temp=A[i]
10. A[i]=A[idxmin]
11. A[idxmin]=temp
Baris ke-4 dari pseudocode di atas adalah tahapan penentuan posisi terhadap elemen terkecil ke-i
di dalam array A. Artinya, elemen terkecil ke-i akan ditempatkan pada indeks ke-i pada array A.
Selanjutnya harus dicari elemen terkecil ke-i tersebut dengan cara menelusuri A mulai dari indeks ke-
(i+1) sampai dengan indeks ke-n. Bagian ini ditangani oleh baris ke-6 sampai baris ke-8 dari pseudocode
di atas. Setelah elemen terkecil ke-i ditemukan, maka elemen terkecil ke-i tersebut harus ditempatkan
pada indeks ke-i. Hal ini dilakukan pada baris ke-9 sampai baris ke-11 dari pseudocode di atas.
2. Implementasi dalam Java
(Kerjakan bagian implementasi dalam Java ini dan kumpulkan di e-learning – M0401xxyyy.jar)
Lalu bagaimana mengimplementasikan pseudocode di atas dalam Java? Tidak ada perbedaan yang
berarti antara pseudocode di atas dengan implementasinya dalam Java. Yang berbeda adalah bahwa pada
pseudocode, indeks dari array dimulai dari 1 sedangkan pada Java, indeks dari array dimulai dari 0. Berikut
ini adalah contoh implementasi selection sort dalam Java.
a. Buatlah sebuah kelas dengan nama SelectionSort. Kelas ini memiliki atribut berupa array of
int dengan nama myArray. Tambahkan juga konstruktor untuk kelas ini dengan parameter
sebuah array of int yang akan mengisi atribut myArray pada kelas ini.
b. Selanjutnya, buatlah method public int sort(int[] array). Method ini mengimplementasikan
pseudocode dari selection sort di atas.
c. Untuk keperluan pengujian, buatlah kelas TesterSelection seperti di bawah ini.
Spesifikasi input:
Input diawali oleh sebuah bilangan bulat ukuranArray yang menyatakan ukuran array.
ukuranArray baris berikutnya adalah terdiri dari bilangan bulat 𝑝 (−100 ≤ 𝑝 ≤ 100) yang
menjadi isi dari array tersebut.
Spesifikasi output:
Semua elemen dari array yang sudah terurut
Contoh input 1:
8
31 19 7 -1 25 64 100 10
Contoh output 1:
-1 7 10 19 25 31 64 100
Contoh input 2:
15
2 3 0 1 2 1 -100 -5 -3 29 18 20 80 100 17
Contoh output 2:
-100 -5 -3 0 1 1 2 2 3 17 18 20 29 80 100
B. Insertion Sort
1. Ide dasar dan Pseudocode
Ide dasar dari insertion sort adalah menempatkan sebuah elemen dari array ke sebuah sub-array
(suatu bagian dari array) yang semua elemennya sudah terurut. Untuk melakukan sorting pada sebuah
array A sehingga semua elemen pada A terurut menaik, langkah-langkahnya adalah sebagai berikut.
a. Elemen pertama sudah termasuk dalam sub-array yang terurut. Mengapa demikian? Pada
awalnya, sub-array ukurannya satu, yaitu hanya pada indeks pertama dari array. Karena sub-
array tersebut hanya mengandung 1 buah elemen yaitu elemen pertama dari array, maka sub-
array tersebut sudah terurut dan mengandung elemen yang pertama.
b. Masukkan elemen kedua pada sub-array yang terurut pada posisi yang tepat sehingga subarray
tersebut tetap terurut setelah elemen kedua dimasukkan.
c. Ulangi proses tersebut pada elemen selanjutnya yang belum terurut sehingga ukuran dari sub-
array yang terurut terus bertambah.
d. Lanjutkan hingga elemen terakhir masuk ke sub-array yang terurut sehingga diperoleh sebuah
array yang sudah terurut.
Perhatikan ilustrasi di bawah ini untuk lebih memahami bagaimana insertion sort bekerja. Kotak
berwarna biru merupakan sub-array dari array A, sedangkan kotak berwarna kuning merupakan elemen
pada array yang akan dimasukkan ke dalam sub-array yang terurut.
31 19 7 -1 25 64 100 10 Kondisi awal array A.
-1 7 10 19 25 31 64 100 Kondisi akhir array A.
31 19 7 - 1 25 64 100 10
Berikut ini adalah pseudocode dari insertion sort.
1. input: unsorted array A with length n
2.
output: non-decreasingly sorted array A with length n
3. INSERTION_SORT(A)
4. for i=2 to n do
5. key=A[i]
6. j=i-1;
7. while(j>=0) AND A[j]>key
8. A[j+1]=A[j]
9. j=j-1
10.
A[j+1]=key
2. Implementasi
(Kerjakan bagian implementasi dalam Java ini dan kumpulkan di e-learning – M0402xxyyy.jar)
a. Buatlah sebuah kelas dengan nama InsertionSort. Kelas ini memiliki atribut bertipe array of int
dengan nama myArray. Tambahkan juga konstruktor untuk kelas ini dengan parameter sebuah
array of int yang akan mengisi atribut myArray pada kelas ini.
b. Pada kelas InsertionSort, buatlah method public int[] sort() untuk mengimplementasikan
insertion sort.
c. Buatlah kelas TesterInsertion untuk melakukan pengujian.
Spesifikasi input:
Input diawali oleh sebuah bilangan bulat ukuranArray yang menyatakan ukuran array.
ukuranArray baris berikutnya adalah terdiri dari bilangan bulat p (-100≤p≤100) yang menjadi isi
dari array tersebut.
Spesifikasi output:
Semua elemen dari array yang sudah terurut
Contoh input 1:
8
31 19 7 -1 25 64 100 10
Contoh output 1:
-1 7 10 19 25 31 64 100
Contoh input 2:
15
2 3 0 1 2 1 -100 -5 -3 29 18 20 80 100 17
Contoh output 2:
-100 -5 -3 0 1 1 2 2 3 17 18 20 29 80 100
3. Sorting di Java
Java menyediakan method static untuk sorting. Method ini disediakan oleh kelas Arrays.
Untuk menggunakannya, terlebih dahulu harus dilakukan import pada java.util.Arrays.
a. Menggunakan Arrays.sort untuk Tipe Data Primitif
Berikut ini adalah contoh penggunaan Arrays.sort untuk mengurutkan elemen-elemen yang
terdapat pada array of int.
b. Menggunakan Arrays.sort untuk Object
(Kerjakan bagian implementasi dalam Java ini dan kumpulkan di e-learning – M0403xxyyy.jar)
Untuk mengurutkan array of object, maka kelas dari object tersebut harus mengimplementasikan
interface Comparabel, kemudian melakukan override pada method compareTo. Contoh di bawah ini
adalah penggunaan Arrays.sort untuk mengurutkan object dari kelas mahasiswa berdasarkan IPK yang
dimiliki dan banyaknya SKS lulus dari mahasiswa tersebut. 1) Buatlah kelas bernama Mahasiswa. Kelas
ini memiliki atribut namaMahasiswa: String, dan
2) Lakukan override pada method compareTo.
Pada saat melakukan override pada method compareTo, yang perlu diperhatikan
adalah return value dari method tersebut. Ketika membandingkan dua buah objek
(objek A dan objek B) berdasarkan suatu key, maka:
- Kembalikan nilai negatif jika key dari objek A lebih kecil daripada key dari objek B. -
Kembalikan nilai positif jika key dari objek A lebih besar daripada key dari objek B.
- Kembalikan nilai 0 jika key dari objek A sama dengan key dari objek B.
Misalnya, akan dibandingkan umur (umur sebagai key) dari objek orang1 dan objek orang2,
maka:
- Kembalikan nilai negatif apabila umur dari orang1 lebih kecil daripada orang2.
- Kembalikan nilai positif apabila umur dari orang1 lebih kecil daripada orang2.
- Kembalikan nilai 0 apabila umur dari orang1 sama dengan umur dari orang2. Pada contoh
ini mahasiswa akan diurutkan berdasarkan indeks prestasinya secara menaik. Apabila ada
mahasiswa yeng memiliki indeks prestasi yang sama, maka mahasiswa yang sks lulusnya
lebih banyak yang akan berada pada indeks lebih kanan dari array.
atribut indeksPrestasi: double. Buatlah konstruktor untuk kelas ini!
3) Lakukan override pada method toString untuk mencetak atribut-atribut dari objek Mahasiswa
dalam sebuah String.
4) Tambahkan kelas Tester untuk membantu Anda melakukan pengujian.
Spesifikasi Input:
Input diawali dengan sebuah bilangan bulat banyakMahasiswa (0<banyakMahasiswa≤100) yang
menyatakan jumlah mahasiswa yang akan dicatat datanya. banyakMahasiswa baris berikutnya terdiri dari
1 buah String nama (tanpa spasi), bilangan decimal yang menyatakan indeksPrestasi, dan 1 buah bilangan
bulat yang menyatakan jumlah sks lulus.
Spesifikasi output:
Data mahasiswa yang sudah terurut
Contoh input 1:
5
Anita 3.50 55
Budi 3.73 55
Charlie 2.00 100
Darwin 1.5 63
Esa 2.35 77
Contoh output 1:
1.Darwin 1.5 63
2.Charlie 2.0 100
3.Esa 2.35 77
4.Anita 3.5 55
5.Budi 3.73 55
Contoh input 2:
10
Anita 3.50 55
Budi 3.73 55
Charlie 2.00 100
Darwin 1.5 63 Esa
2.35 77
Fikri 3.30 80
Givan 3.50 80
Hendra 2.00 36
Indra 0.54 10
Josua 2.54 18
Contoh output 2:
1.Indra 0.54 10 2.Darwin
1.5 63
3.Hendra 2.0 36
4.Charlie 2.0 100
5.Esa 2.35 77
6.Josua 2.54 18
7.Fikri 3.3 80 8.Anita
3.5 55
9.Givan 3.5 80
10.Budi 3.73 55
Untuk memastikan bahwa Anda sudah memahami bagian ini, cobalah untuk melakukan sorting secara menurun pada kelas Mahasiswa tersebut berdasarkan indeksPrestasi dan sksLulus.