Mtode Pemograman Algoritma Selection Sort

12

Click here to load reader

Transcript of Mtode Pemograman Algoritma Selection Sort

Page 1: 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

Page 2: Mtode Pemograman Algoritma Selection Sort

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)

Page 3: Mtode Pemograman Algoritma Selection Sort

{

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

Page 4: Mtode Pemograman Algoritma Selection Sort

}

Hasil Program Setelah di Eksekusi

http://allaboutalgoritma.blogspot.com/2009/06/metode-pengurutan-seleksi-selection.html

Page 5: Mtode Pemograman Algoritma Selection Sort

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:

Page 6: Mtode Pemograman Algoritma Selection Sort

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:

Page 7: Mtode Pemograman Algoritma Selection Sort

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];

    }

Page 8: Mtode Pemograman Algoritma Selection Sort

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

}

Page 9: Mtode Pemograman Algoritma Selection Sort

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++) {

Page 10: Mtode Pemograman Algoritma Selection Sort

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

    }

}

Page 11: Mtode Pemograman Algoritma Selection Sort