Mtode Pemograman Algoritma Selection Sort
Click here to load reader
-
Upload
krezna-watanabe -
Category
Documents
-
view
25 -
download
2
Transcript of Mtode Pemograman Algoritma Selection Sort
Mtode Pemograman Algoritma Selection SortPosted by Opie Eyek at 06:52 16 Juni 2009
Pengurutan seleksi (selection sort) mempunyai mekanisme seperti berikut : Mula-mula suatu penunjuk
(diberi nama posAwal), yang menunjuk ke lokasi awal pengurutan data, diatur agar berisi indeks
pertama dalam larik. Selanjutnya dicari bilangan terkecil yang terletak antara posisi sesudah yang
ditunjuk oleh petunjuk tersebut hingga elemen yang terakhir dalam larik. Lokasi bilangan ini ditunjuk
oleh posMin. Lalu tukarkan nilai bilangan terkecil tersebut dengan nilai yang ditunjuk posAwal. Proses
seperti itu diulang dari posAwal bernilai 0 hingga n-2, dengan n menyatakan jumlah elemen dalam
larik.
Implementasi pengurutan selection sort dalam bentuk algoritma dan program
Algoritma :
SUBRUTIN selection_sort (L,n)
UNTUK posAwal = 0 S/D n-2
PosMin ← posAwal
UNTUK j ← posAwal + 1 S/D n-1
JIKA L [posMin] > L[j] MAKA
PosMin ← j
AKHIR – JIKA
AKHIR – UNTUK
//Tukarkan
tmp ← L[posAwal]
L[posAwal] ← L[posMin]
AKHIR – UNTUK
AKHIR – SUBRUTIN
Sourch Code Program C++
#include <iostream.h>
#include <conio.h>
void tampilkan_larik(int data[], int n)
{
int i;
for (i=0;i<n;i++)
cout<<data[i]<<" ";
cout<<"\n";
}
void selection_sort (int data[], int n)
{
int posMin, posAwal, j, tmp;
for (posAwal=0;posAwal<n-1;posAwal++)
{
posMin=posAwal;
for (j=posAwal+1;j<n;j++)
if (data[posMin]>data[j])
posMin=j;
//tukarkan
tmp=data[posAwal];
data[posAwal]=data[posMin];
data[posMin]=tmp;
cout<<"hasil posAwal= "<<posAwal<<" : ";
tampilkan_larik(data,n);
}
}
int main()
{
const jum_data=8;
int i;
int data[]={25,57,48,37,12,92,80,33};
selection_sort(data, jum_data);
//hasil pengurutan
cout<<endl;
cout<<"Hasil pengurutan:\n";
tampilkan_larik(data,jum_data);
getch();
}
Hasil Program Setelah di Eksekusi
http://allaboutalgoritma.blogspot.com/2009/06/metode-pengurutan-seleksi-selection.html
Mengurutkan Bilangan dengan Selection SortAlgoritma dan Pemrograman
by Muhammad Alvin
Untuk mengurutkan sekumpulan bilangan, dapat dilakukan dengan berbagai cara (algoritma),
misalnya bubble sort, selection sort, merge sort, quick sort. Di bawah ini akan dijelaskan cara
mengurutkan sekumpulan bilangan menggunakan selection sort.
Dalam selection sort ini kita memilih (select) bilangan terkecil, kemudian menempatkannya di
awal. Kemudian memilih bilangan terkecil selanjutnya (terkecil kedua), dan menempatkannya di
posisi setelah awal (posisi kedua). Berikutnya memilih bilangan terkecil ketiga, dan
menempatkannya di posisi ketiga. Begitu seterusnya.
Misalnya diberikan sekumpulan bilangan berikut:1 3 8 5 7 2 3 6 8 0 4
Maka cara mengurutkannya seperti ini.
Pertama, cari bilangan yang paling kecil dari paling kiri (posisi 1):1
2
3 8 5 7 2 3 6 8 0 4
--------------------------------|
Pindahkan bilangan tersebut ke depan (posisi 1). Bilangan yang ada di posisi 1 tersebut
dipindahkan ke posisi bilangan terkecil tadi (istilahnya swap = tukar tempat):1 [0] 8 5 7 2 3 6 8 [3] 4
Maka posisi 1 sudah berisi bilangan yang tepat.
Selanjutnya, cari bilangan yang paling kecil berikutnya. Kali ini, tidak dari posisi 1 (karena di
posisi tersebut sudah berisi bilangan yang tepat), tetapi cari dari posisi 2:1
2
0 8 5 7 2 3 6 8 3 4
------------|
Swap bilangan tersebut ke posisi 2:1 0 [2] 5 7 [8] 3 6 8 3 4
Maka posisi 2 sudah berisi bilangan yang tepat.
Selanjutnya, cari bilangan yang paling kecil berikutnya. Kali ini, dari posisi 3:
1
2
0 2 5 7 8 3 6 8 3 4
------------|
Swap bilangan tersebut ke posisi 3:1 0 2 [3] 7 8 [5] 6 8 3 4
Maka posisi 3 sudah berisi bilangan yang tepat.
Selanjutnya cari bilangan yang paling kecil berikutnya dari posisi 4:1
2
0 2 3 7 8 5 6 8 3 4
--------------------|
Kemudian swap:1 0 2 3 [3] 8 5 6 8 [7] 4
Selanjutnya dari posisi 5:1
2
0 2 3 3 8 5 6 8 7 4
--------------------|
Hasil swap:1 0 2 3 3 [4] 5 6 8 7 [8]
Selanjutnya dari posisi 6:1
2
0 2 3 3 4 5 6 8 9 8
|
Karena bilangan terkecil berikutnya sudah terletak di posisinya yang sesuai, maka tidak perlu
dilakukan swap.
Selanjutnya dari posisi 7:1
2
0 2 3 3 4 5 6 8 9 8
|
Ini juga tidak perlu melakukan swap.
Selanjutnya dari posisi 8:
1
2
0 2 3 3 4 5 6 8 9 8
|
Tidak perlu swap.
Selanjutnya dari posisi 9 yang merupakan posisi terakhir. Setelah mencari bilangan terkecil dari
posisi ini dan melakukan swap, kita tidak perlu melanjutkan pencarian ke posisi 10. Pada posisi
tersebut sudah pasti berisi bilangan terbesar yang merupakan hasil swap-swap sebelumnya.1
2
0 2 3 3 4 5 6 8 9 8
----|
Hasil swap terakhir (hasil ini sudah terurut):1 0 2 3 3 4 5 6 8 [8] [9]
Berikut adalah contoh implementasi algoritma di atas dalam bahasa C++:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
#include <cstdlib>
using namespace std;
int main()
{
int N;
cout << "N = ";
cin >> N;
int bilangan[N];
cout << "bilangan (pisah dgn spasi) = ";
for (int i = 0; i < N; i++) {
cin >> bilangan[i];
}
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
// selection sort
for (int i = 0; i < N - 1; i++) {
// cari yg paling minimum
int posisiTerkecil = i;
for (int j = i + 1; j < N; j++) {
if (bilangan[j] < bilangan[posisiTerkecil]) {
posisiTerkecil = j;
}
}
// swap ke depan (kalo memang perlu dilakukan swap)
if (posisiTerkecil != i) {
int sementara = bilangan[i];
bilangan[i] = bilangan[posisiTerkecil];
bilangan[posisiTerkecil] = sementara;
}
}
cout << "hasil = ";
for (int i = 0; i < N; i++) {
cout << bilangan[i] << " ";
}
cout << endl;
// system("pause");
}
41
42
43
Dan berikut merupakan contoh implementasi dalam Java:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import java.util.Scanner;
public class SelectionSort {
public static void main(String[] args)
{
Scanner sc = new Scanner(System.in);
System.out.print("N = ");
int N = sc.nextInt();
System.out.print("bilangan (pisah dgn spasi) = ");
int[] bilangan = new int[N];
for (int i = 0; i < N; i++) {
bilangan[i] = sc.nextInt();
}
// selection sort
for (int i = 0; i < N - 1; i++) {
// cari bilangan terkecil
int posisiTerkecil = i;
for (int j = i + 1; j < N; j++) {
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
if (bilangan[j] < bilangan[posisiTerkecil]) {
posisiTerkecil = j;
}
}
// swap (jika memang harus di-swap)
if (posisiTerkecil != i) {
int sementara = bilangan[i];
bilangan[i] = bilangan[posisiTerkecil];
bilangan[posisiTerkecil] = sementara;
}
}
System.out.print("hasil = ");
for (int i = 0; i < N; i++) {
System.out.print(bilangan[i] + " ");
}
System.out.println();
}
}