Anda di halaman 1dari 17

DISUSUN OLEH :

BAYU PERMANA AJI 1531101

SUNANDAR 1531110
Pengertian Selection Sort

Selection Sort merupakan salah satu algoritma pengurutan yang


sederhana. Ide dasarnya adalah melakukan beberapa kali pass untuk
melakukan penyeleksian elemen struktur data. Untuk sorting ascending
(menaik), elemen yang paling kecil di antara elemen-elemen yang belum
urut, disimpan indeksnya, kemudian dilakukan pertukaran nilai elemen
dengan indeks yang disimpan tersebut dengan elemen yang paling depan
yang belum urut. Sebaliknya, untuk sorting descending (menurun), elemen
yang paling besar yang disimpan indeksnya kemudian ditukar.

2
Cara Kerja Algoritma Selection Sort

1. Mencari nilai minimum (jika ascending) atau maksimum (jika


descending) dalam sebuah list
2. Menukarkan nilai ini dengan elemen pertama list
3. Mengulangi langkah di atas untuk sisa list dengan dimulai pada posisi
kedua.
4. Selection sort merupakan perbaikan dari metode bubble sort dengan
mengurangi jumlah perbandingan.
5. Selection sort merupakan metode pengurutan dengan mencari nilai
data terkecil dan nilai data terbesar dimulai dari data diposisi 0 hingga
diposisi N-1.

3
Cara Kerja Algoritma Selection Sort

Secara efisien kita membagi list menjadi dua bagian yaitu bagian yang sudah
diurutkan, yang didapat dengan membangun dari kiri ke kanan dan dilakukan
pada saat awal, dan bagian list yang elemennya akan diurutkan.

4
Contoh Simulasi Algoritma Selection Sort

1. inisialisasi n adalah ukuran data, pada contoh di atas n


=7
2. inisialisasi i ← 1 sebagai awal proses.
3. kecil ← i { asumsi awal, posisi ke-i lah yang paling
kecil, garis merah pada gambar di atas }.
4. j ← i + 1 { j adalah posisi data pembanding, garis
hitam pada gambar di atas }
5. Jika Data j < Data kecil, maka posisi ke-j lebih kecil,
lalu ubah posisi index, kecil ← j
6. j ← j + 1
7. Jika j = n { perbandingan sudah sampai index terakhir
} maka lanjut ke baris 8, jika tidak ulang ke baris 5.
8. lakukan pertukaran Data-i dengan Data-terkecil (garis
merah dengan garis biru pada gambar di atas).
9. i ← i + 1 { perubahan tiap tahap, garis
merah bergeser pada tiap tahapan }
10. Ulang ke baris ke-3 selama i < n - 1
11. Selesai .
5
2. Analisis Dua Kasus (IF-THEN-ELSE)

Pernyataan if else mempunyai bentuk sebagai


berikut :
If (kondisi)
Peryataan 1 ; Flowchart if sederhana
Else
Pernyataan 2 ;

Pada variasi ini, apabila kondisi benar maka statement -1 yang


di kerjakan dan apabila kondisi bernilai salah maka statement - 2
yang di kerjakan (tidak pernah statement ini di kerjakan semua )

6
Contoh pemilihan ( if – then - else ) :

Judul : Menentukan_Bilangan_Positif
{I.S : User memasukkan sebuah nilai}
{F.S : Menampilkan hasil proses apakah nilai yang dimasukkan user
adalah bilangan positif atau bukan}

Kamus :
X : real

Algoritma :
Input (X)
IF X > 0 THEN
Output (X, “adalah bilangan positif”)
ELSE
Output (X, “bukan bilangan positif”)

7
negatip
Terapan bentuk-bentuk IF Solusi : ada beberapa cara berikut
Sebuah masalah terkadang dapat diselesaikan dengan Solusi-1 Solusi-2
berbagai cara, seperti penggunaan “if tanpa else” dan Input(bil) Input(bil)
If (bil>=0) If (bil<0)
“if dengan else”. Sebagai contoh dapat dilihat pada Output(„positip‟) Output(„negatip‟)
kasus berikut: Else Else
Kasus 7.1 : Menentukan apakah bilangan yang diinput Output(„negatip‟) Output(„positip‟)
positip atau negatif
Solusi-3 Solusi-4
Input(bil) Input(bil)
 
Ket „positip‟ Ket „negatip‟
If (bil<0) If (bil>=0)
 
Ket „negatip‟ Ket „positip
Output(Ket) Output(Ket)
Solusi-5 Solusi-6
Input(bil) Input(bil)
If (bil>=0) If (bil<0)
Output(„positip‟) Output(„negatip‟)

If (bil<0) If (bil>=0)
Output(„negatip‟) Output(„positip‟)

Solusi-7 Solusi-8
Input(bil) Input(bil)
 
positip bil>=0 positip bil>=0
If (positip=true) If (positip)
Output(„positip‟) Output(„positip‟)
else else
Output(„negatip‟) Output(„negatip‟)

8
3. Analisis Tiga Kasus atau lebih (IF-THEN-ELSE Bertingkat dan Struktur Case)

Pernyataan if yang terletak dalam if sering disebut


nested if atau if bersarang. Salah satu bentuknya
adalah :
if (kondisi1)
pernyataan1;
else if (kondisi2)
pernyataan2;
else if (kondisi3)
pernyataan3;
if (kondisiM)
pernyataanM;
else /*Opsional*/
pernyataanN; /*Opsional*/

9
Bentuk pernyatan if seperti ini bermanfaat untuk
menyeleksi sejumlah kemungkinan tindakan.
Penyeleksian dilakukan secara bertingkat. Flowchat if
dalam if berikut :
If (kondisi-1)
If (kondisi-2)
Statement-a benar?
Kondisi-1
Ya Tidak

Else
Statement-b benar? benar?
Kondisi-2 Kondisi-3
else
Pada variasi ini, apabila kondisi-1 bernilai benar maka Ya Tidak Ya Tidak

dilanjutkan memeriksa kondisi-2. Apabila kondisi-2 if (kondisi-3) Statement- Statement-


Statement-a Statement-b c d

bernilai benar maka Statement-a yang dikerjakan dan Statement-c


Else
apabila kondisi-2 bernilai salah maka Statement-b yang
Statement-d
dikerjakan. Sedangkan apabila kondisi-1 salah maka Else
dilanjutkan memeriksa kondisi-3. Apabila kondisi-3 ...
bernilai benar maka Statement-c yang dikerjakan dan
apabila kondisi-3 bernilai salah maka Statement-d yang
dikerjakan. (dari 4 statement yang ada hanya salah
satu yang dikerjakan

10
cout << “M enentukan hari “ << endl;
cout << “1 = Senin 3 = Rabu 5 = Jum‟at 7
Contoh 22 Hasil M inggu “<< endl;
//* --------------------------------------------------- M enentukan hari cout << “2 = Selasa 4 = Kamis 6 = Sabtu “
---------* 1 = Senin 3 = Rabu 5 = Jum‟at << endl;
//* C ontoh 22 : P emakaian if bertingkat 7 = M inggu cout << “Kode hari [1..7] : “ ;
untuk * 2 = Selasa 4 = Kamis 6 = cin >> kode_hari;
Sabtu // P roses seleksi;
//* menentukan nama hari *
if (kode_hari = = 1)
Kode hari [1..7] : 2 
//* --------------------------------------------------- cout << “Senin” << endl;
Selasa if (kode_hari = = 2)
---------* cout << “Selasa” << endl;
#include <iostream.h> if (kode_hari = = 3)
#include <conio.h> cout << “Rabu” << endl;
v oid main () if (kode_hari = = 4)
{ cout << “Kamis” << endl;
int kode_hari; if (kode_hari = = 5)
cout << “Jum‟at” << endl;
if (kode_hari = = 6)
Program diatas pertama-tama meminta kode hari cout << “Sabtu” << endl;
if (kode_hari = = 7)
dimasukkan dari keyboard. Kemudian if dan else
cout << “M inggu” << endl;
secara bertingkat akan menyeleksi nilai tersebut dan else
memeberikan nama hari cout << “Kode hari salah” << endl;
}
}

11
Contoh :
PDAM menerapkan pembayaran air minum perumahan dengan cara perhitungan sebagai
berikut :
Tarif per m3 untuk 10 m3 pertama (1-10) adalah 2.000
Tarif per m3 untuk 10 m3 kedua (11-20) adalah 3.000
Tarif per m3 untuk 10 m3 ketiga (21-30) adalah 4.000
Tarif per m3 untuk 10 m3 selanjutnya (31 ke atas) adalah 5.000
Pemakaian air dihitung minimal 10 m3 (kurang dari 10 m3 dianggap 10 m3)
Biaya administrasi bulanan sebesar 10.000
Bagaimana membuat algoritma untuk menghitung biaya tersebut?
Contoh kasus
Penggunaan air 5 m3 dengan biaya :
10 x 2.000 + 10.000 = 30.000
Penggunaan air 15 m3 dengan biaya :
10 x 2.000 + 5 x 3.000 + 10.000 = 45.000
Penggunaan air 75 m3 dengan biaya :
10 x 2.000 + 10 x 3.000 + 10 x 4.000 + 45 x 5.000 +10.000 =
325.000

Solusi :

Pemakaian air dibagi menjadi 4 area pemakaian (misal area a,b,c,d), baru dihitung total biaya

12
Solusi-1
Input(pakai)
If (pakai>30)

a 10

b 10

c 10

d pakai - 30
Else If (pakai>20)

a 10

b 10

c pakai - 20

d 0
Else If (pakai>10)

a 10

b pakai - 10

c 0

d 0
Else

a 10

b 0

c 0

d 0

biaya a * 2000 + b * 3000 + c * 4000 + d * 5000 + 10000
Output(„biaya =‟,biaya)

Ulasan solusi :

Pada solusi-1, tiap aksi dari if , terdiri dari 4 statement mengisi a,b,c
dan d. Bentuk solusi ini disederhanakan pada solusi-2 dengan cara
memberikan nilai awal sebelum masuk if.
13
Solusi-1 Solusi-2
Kasus 7.4 : Indeks Nilai Kuliah
Input(UTS,UAS,Tugas,Abs) Input(UTS,UAS,Tugas,Abs)
 
NAS 0.3*UTS + 0.4*UAS + NAS 0.3*UTS +
Indeks nilai sebuah matakuliah didapat dengan cara menghitung 0.2*Tugas + 0.1*ABS 0.4*UAS +
nilai akhir berdasarkan prosentase komponen-komponennya If (NAS>=85) 0.2*Tugas + 0.1*ABS
kemudian menentukan indeks nilainya. Misal digunakan 
Indeks „A‟ If (NAS>=85)
ketentuan sebagai berikut: 
ElseIf (NAS>=70 and NAS<85) Indeks „A‟
•Nilai Akhir dihitung dari 30% UTS, 40%UAS, 20% Tugas dan Indeks  „B‟ Else If (NAS>=70)

10% kehadiran ElseIf (NAS>=55 and NAS<70) Indeks „B‟

•Indeks Nilai ditentukan berdasarkan Nilai Akhir (NA), Bila NA >= Indeks „C‟ Else If (NAS>=55)

85 maka Indeksnya A ElseIf (NAS>=40 and NAS<55) Indeks „C‟

Bila 85 > NA >= 70 maka Indeksnya B Bila 70 > NA >= 55 maka Indeks „D‟ Else If (NAS>=40)

Indeksnya C Else Indeks „D‟

Bila 55 > NA >= 40 maka Indeksnya D Bila NA < 40 maka Indeks „E‟ Else

Indeksnya E Output(„Indeks Nilai =‟,Indeks) Indeks „E‟

Bagaimana membuat algoritma untu kmenentukan Indeks Nilai


Output(„Indeks Nilai
=‟,Indeks)
tersebut ?

Ulasan solusi :

Pada solusi-2 lebih baik dari solusi-1 karena pemeriksaan kondisi yang serupa tidak dilakukan dua
kali. Pada solusi-1, pembandingan NAS dengan 85 dilakukan dua kali, yang pertama NAS>=85
dan yang kedua NAS<85 adalah pembandingan yang serupa.

14
Pernyataan Case

Case adalah pernyataan yang digunakan untuk menjalankan salah satu


pernyataan dari beberapa kemungkinan pernyataan, berdasarkan nilai dari sebuah
ungkapan dan nilai penyeleksi. Sebenarnya semua bentuk pemilihan dapat ditulis
dengan IF, namun penulisan dengan IF untuk banyak pilihan terasa kurang praktis.
Bentuk CASE adalah cara lain penulisan bentuk pemilihan yang lebih sederhana,
namun bentuk ini hanya dapat menggantikan IF apabila memenuhi syarat:
kondisi berupa pembandingan kesamaan (dengan tanda “=” )
nilai yang dibandingkan bertipe ordinal (integer,char dan boolean)
Bentuk CASE yang juga dikenal dengan istilah CASE Statement, memiliki bentuk
umum sebagai berikut :
switch (ungk apan)
case ungk apan1;
pernyataan_1;
break;
case ungkapan2;
pernyataan_2;
break;
……….
default : /*Opsinal*/
pernyataan_x; /*Opsinal*/
15
Te rapan bentuk-bentuk CASE

Kasus 7.5 : Menentukan nama hari dari nomor hari


yang diinput Dinput nomor hari, ditampilkan nama
harinya, bagaimana algoritma
Solusi IF dan CASE
Solusi-If Solusi-Case
Input(NoHari) Input(NoHari)
If (NoHari=1) then Case NoHari
 
NmHari „Senin‟ 1: NmHari „Senin‟;Break;

Else If (NoHari=2) 2: NmHari „Selasa‟;Break;
 
NmHari „Selasa‟ 3: NmHari „Rabu‟;Break;

Else If (NoHari=3) 4: NmHari „Kamis‟;Break;
 
NmHari „Rabu‟ 5: NmHari „Jumat‟;Break;

Else If (NoHari=4) 6: NmHari „Sabtu‟;Break;
NmHari  „Kamis‟ 7: NmHari

„Minggu‟;Break;
Else If (NoHari=5) Output(NmHari)

NmHari „Jumat‟
Else If (NoHari=6)

NmHari „Sabtu‟
Else If (NoHari=7) then

NmHari „Minggu‟
Output(NmHari)

16
17

Anda mungkin juga menyukai