Anda di halaman 1dari 11

Mtode Pemograman Algoritma Selection Sort

Posted 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-seleksiselection.html

Mengurutkan Bilangan dengan Selection Sort


Algoritma 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: 3 8 5 7 2 3 6 8 0 4 1

Maka cara mengurutkannya seperti ini. Pertama, cari bilangan yang paling kecil dari paling kiri (posisi 1): 1 3 8 5 7 2 3 6 8 0 4 2
--------------------------------|

Pindahkan bilangan tersebut ke depan (posisi 1). Bilangan yang ada di posisi 1 tersebut dipindahkan ke posisi bilangan terkecil tadi (istilahnya swap = tukar tempat): [0] 8 5 7 2 3 6 8 [3] 4 1

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 0 8 5 7 2 3 6 8 3 4 2
------------|

Swap bilangan tersebut ke posisi 2: 0 [2] 5 7 [8] 3 6 1

Maka posisi 2 sudah berisi bilangan yang tepat. Selanjutnya, cari bilangan yang paling kecil berikutnya. Kali ini, dari posisi 3:

1 2

------------|

Swap bilangan tersebut ke posisi 3: 0 2 [3] 7 8 [5] 6 1

Maka posisi 3 sudah berisi bilangan yang tepat. Selanjutnya cari bilangan yang paling kecil berikutnya dari posisi 4: 1 0 2 3 7 8 5 6 8 3 4 2
--------------------|

Kemudian swap: 0 2 3 1

[3]

[7]

Selanjutnya dari posisi 5: 1 0 2 3 3 8 2

--------------------|

Hasil swap: 0 2 1

[4]

[8]

Selanjutnya dari posisi 6: 1 0 2 3 3 4 2

5 |

Karena bilangan terkecil berikutnya sudah terletak di posisinya yang sesuai, maka tidak perlu dilakukan swap. Selanjutnya dari posisi 7: 1 0 2 3 3 4 2

6 |

Ini juga tidak perlu melakukan swap. Selanjutnya dari posisi 8:

1 2

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 0 2 3 3 4 5 6 8 9 8 2
----|

Hasil swap terakhir (hasil ini sudah terurut): 0 2 3 3 4 5 6 8 [8] [9] 1

Berikut adalah contoh implementasi algoritma di atas dalam bahasa C++: 1 #include <iostream> 2 3 4 5 6 7
cout << "N = "; int main() { int N; #include <cstdlib> using namespace std;

8 9 10 11 12 13 14 15

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

// 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]) {

21 22 23 24 25 26 27 28 29
} } }

posisiTerkecil = j;

// swap ke depan (kalo memang perlu dilakukan swap) if (posisiTerkecil != i) { int sementara = bilangan[i]; bilangan[i] = bilangan[posisiTerkecil]; bilangan[posisiTerkecil] = sementara;

30
}

31 32 33 34 35 36 37 38 39 40
} // system("pause"); cout << endl; } cout << "hasil = "; for (int i = 0; i < N; i++) { cout << bilangan[i] << " ";

41 42 43

Dan berikut merupakan contoh implementasi dalam Java: 1 2 3 4


public static void main(String[] args) public class SelectionSort { import java.util.Scanner;

5
{

6 7 8 9 10 11 12 13 14 15 16 17 18

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

19 20 21

int posisiTerkecil = i; for (int j = i + 1; j < N; j++) { if (bilangan[j] < bilangan[posisiTerkecil]) {

22 23 24 25 26 27
} }

posisiTerkecil = j;

// swap (jika memang harus di-swap) if (posisiTerkecil != i) { int sementara = bilangan[i];

28 29 30 31 32 33 34 35 36 37
} } } }

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();

38 39 40 41 42 43
}