Modul 11 : Selection Sort - fzl-22/modul-alpro-informatika GitHub Wiki

Selection Sort

Pengertian Selection Sort

Algoritma Selection Sort merupakan salah satu algoritma pengurutan data yang bertujuan untuk mengurutkan elemen-elemen data dari yang terkecil sampai yang terbesar atau sebaliknya. Cara kerja algoritma ini adalah dengan memilih elemen terkecil pada setiap iterasi, kemudian menukarkannya dengan elemen pada indeks yang sesuai. Proses ini dilakukan terus-menerus sampai semua elemen terurut dengan benar. Algoritma ini relatif sederhana, namun tidak efisien dibandingkan dengan algoritma pengurutan lainnya.

Salah satu alasan mengapa selection sort tidak efisien adalah karena ia memerlukan banyak operasi pertukaran untuk mengurutkan elemen-elemen data. Algoritma ini mencari elemen terkecil pada setiap iterasi dan menukarkannya dengan elemen pada indeks yang sesuai, yang berarti ia harus melakukan banyak pertukaran elemen untuk mengurutkan seluruh data. Selain itu, algoritma ini juga memerlukan banyak operasi perbandingan untuk mencari elemen terkecil pada setiap iterasi, yang dapat memperlambat proses pengurutan.

Ilustrasi Selection Sort


Warna merah merupakan nilai paling kecil yang ditemukan saat ini, nilai ini dapat berubah apabila ditemukan nilai lain yang lebih kecil dalam satu iterasi, warna biru merupakan proses pencarian nilai terkecil pada list, dan warna kuning merupakan list yang telah diurutkan.

Untuk dapat lebih memahami ilustrasi di atas, mari kita pahami proses berjalannya ilustrasi tersebut dengan membedah proses dari tiap iterasinya.
Kita memiliki data [8, 5, 2, 6, 9, 3, 1, 4, 0, 7] dan kita mengurutkannya dengan metode ascending.

Angka di dalam kurung merupakan angka yang telah terurut.
Iterasi 1:
8, 5, 2, 6, 9, 3, 1, 4, 0, 7 → Min 8
8, 5, 2, 6, 9, 3, 1, 4, 0, 7 → Min 5
8, 5, 2, 6, 9, 3, 1, 4, 0, 7 → Min 2
8, 5, 2, 6, 9, 3, 1, 4, 0, 7 → Min 2
8, 5, 2, 6, 9, 3, 1, 4, 0, 7 → Min 2
8, 5, 2, 6, 9, 3, 1, 4, 0, 7 → Min 2
8, 5, 2, 6, 9, 3, 1, 4, 0, 7 → Min 1
8, 5, 2, 6, 9, 3, 1, 4, 0, 7 → Min 1
8, 5, 2, 6, 9, 3, 1, 4, 0, 7 → Min 0
8, 5, 2, 6, 9, 3, 1, 4, 0, 7 → Min 0
(0), 5, 2, 6, 9, 3, 1, 4, 8, 7 → Swap 8 dan 0

Iterasi 2:
(0), 5, 2, 6, 9, 3, 1, 4, 8, 7 → Min 5
(0), 5, 2, 6, 9, 3, 1, 4, 8, 7 → Min 2
(0), 5, 2, 6, 9, 3, 1, 4, 8, 7 → Min 2
(0), 5, 2, 6, 9, 3, 1, 4, 8, 7 → Min 2
(0), 5, 2, 6, 9, 3, 1, 4, 8, 7 → Min 2
(0), 5, 2, 6, 9, 3, 1, 4, 8, 7 → Min 1
(0), 5, 2, 6, 9, 3, 1, 4, 8, 7 → Min 1
(0), 5, 2, 6, 9, 3, 1, 4, 8, 7 → Min 1
(0), 5, 2, 6, 9, 3, 1, 4, 8, 7 → Min 1
(0, 1), 2, 6, 9, 3, 5, 4, 8, 7 → Swap 5 dan 1

Iterasi 3:
(0, 1), 2, 6, 9, 3, 5, 4, 8, 7 → Min 2
(0, 1), 2, 6, 9, 3, 5, 4, 8, 7 → Min 2
(0, 1), 2, 6, 9, 3, 5, 4, 8, 7 → Min 2
(0, 1), 2, 6, 9, 3, 5, 4, 8, 7 → Min 2
(0, 1), 2, 6, 9, 3, 5, 4, 8, 7 → Min 2
(0, 1), 2, 6, 9, 3, 5, 4, 8, 7 → Min 2
(0, 1), 2, 6, 9, 3, 5, 4, 8, 7 → Min 2
(0, 1), 2, 6, 9, 3, 5, 4, 8, 7 → Min 2
(0, 1, 2), 6, 9, 3, 5, 4, 8, 7 → Tidak terjadi swap

Iterasi 4:
(0, 1, 2), 6, 9, 3, 5, 4, 8, 7 → Min 6
(0, 1, 2), 6, 9, 3, 5, 4, 8, 7 → Min 6
(0, 1, 2), 6, 9, 3, 5, 4, 8, 7 → Min 3
(0, 1, 2), 6, 9, 3, 5, 4, 8, 7 → Min 3
(0, 1, 2), 6, 9, 3, 5, 4, 8, 7 → Min 3
(0, 1, 2), 6, 9, 3, 5, 4, 8, 7 → Min 3
(0, 1, 2), 6, 9, 3, 5, 4, 8, 7 → Min 3
(0, 1, 2, 3), 9, 6, 5, 4, 8, 7 → Swap 6 dan 3

Iterasi 5:
(0, 1, 2, 3), 9, 6, 5, 4, 8, 7 → Min 9
(0, 1, 2, 3), 9, 6, 5, 4, 8, 7 → Min 6
(0, 1, 2, 3), 9, 6, 5, 4, 8, 7 → Min 5
(0, 1, 2, 3), 9, 6, 5, 4, 8, 7 → Min 4
(0, 1, 2, 3), 9, 6, 5, 4, 8, 7 → Min 4
(0, 1, 2, 3), 9, 6, 5, 4, 8, 7 → Min 4
(0, 1, 2, 3, 4), 6, 5, 9, 8, 7 → Swap 9 dan 4

Iterasi 6:
(0, 1, 2, 3, 4), 6, 5, 9, 8, 7 → Min 6
(0, 1, 2, 3, 4), 6, 5, 9, 8, 7 → Min 5
(0, 1, 2, 3, 4), 6, 5, 9, 8, 7 → Min 5
(0, 1, 2, 3, 4), 6, 5, 9, 8, 7 → Min 5
(0, 1, 2, 3, 4), 6, 5, 9, 8, 7 → Min 5
(0, 1, 2, 3, 4, 5), 6, 9, 8, 7 → Swap 6 dan 5

Iterasi 7:
(0, 1, 2, 3, 4, 5), 6, 9, 8, 7 → Min 6
(0, 1, 2, 3, 4, 5), 6, 9, 8, 7 → Min 6
(0, 1, 2, 3, 4, 5), 6, 9, 8, 7 → Min 6
(0, 1, 2, 3, 4, 5), 6, 9, 8, 7 → Min 6
(0, 1, 2, 3, 4, 5, 6), 9, 8, 7 → Tidak terjadi swap

Iterasi 8:
(0, 1, 2, 3, 4, 5, 6), 9, 8, 7 → Min 9
(0, 1, 2, 3, 4, 5, 6), 9, 8, 7 → Min 8
(0, 1, 2, 3, 4, 5, 6), 9, 8, 7 → Min 7
(0, 1, 2, 3, 4, 5, 6, 7), 8, 9 → Swap 9 dan 7

Iterasi 9:
(0, 1, 2, 3, 4, 5, 6, 7), 8, 9 → Min 8
(0, 1, 2, 3, 4, 5, 6, 7), 8, 9 → Min 8
(0, 1, 2, 3, 4, 5, 6, 7, 8), 9 → Tidak terjadi swap

Iterasi 10 :
(0, 1, 2, 3, 4, 5, 6, 7, 8), 9 → Min 9
(0, 1, 2, 3, 4, 5, 6, 7, 8, 9) → Tidak terjadi swap (Hasil Akhir)

Contoh Selection Sort

#include <stdio.h>

int main(){
    int angka[10]={8,5,2,6,9,3,1,4,0,7};
	//Melakukan looping sebanyak jumlah data
	for(int i=0; i<10; i++){
		//Anggap index ke i adalah angka terkecil
		int indexNilaiMinimal=i;
		//Looping untuk mencari angka yang terkecil dengan membandingkan setiap angka
		for(int j=i; j<10; j++){
			//Jika ada yang lebih kecil dari angka index ke indexNilaiMinimal
			if(angka[j]<angka[indexNilaiMinimal]){
				//maka, ganti indexNilaiMinimal menjadi index angka tersebut
				indexNilaiMinimal=j;
			}
		}
		//Swap value
		int temp=angka[i];
		angka[i]=angka[indexNilaiMinimal];
		angka[indexNilaiMinimal]=temp;
	}
	//Cetak data
	for(int i=0; i<10; i++){
		printf("%d ", angka[i]);
	}
}

Latihan Soal

Buatlah program yang menerima input dari user berupa jumlah tim dan skor dari tiap tim (3 skor), lalu jumlahkan skor dari setiap tim dan urutkan hasil penjumlahan skor dari yang terbesar menggunakan selection sort..

Input 1:

Jumlah Tim : 3
Skor tim 1 : 30 40 20
Skor tim 2 : 10 30 20
Skor tim 3 : 80 50 40

Output 1:

170
90
50

Input 2:

Jumlah Tim : 3
Skor Tim 1 : 40 40 40
Skor Tim 2 : 30 30 30
Skor Tim 3 : 35 35 35

Output 2:

120
105
90
⚠️ **GitHub.com Fallback** ⚠️