Metode seleksi langsung ( Straight selection )
Metode ini memilih elemen maksimum/minimum dari larik, lalu menempatkan elemen itu pada awal atau akhir larik (elemen terujung). Selanjutnya elemen terujung tersebut ‘diisolasi’ dan tidak disertakan pada proses selanjutnya. Proses yang sama diulang untuk elemen larik yang tersisa, yaitu memilih elemen maksimum/minimum berikutnya dan mempertukarkannya dengan elemen terujung larik sisa. Dua varian algoritma pengurutan pilih ditinjau dari pemilihan elemen maksimum/minimum, yaitu:
a pengurutan pilih maksimum
misalkan larik L dengan n=6 sebagai berikut
29 | 27 | 10 | 8 | 76 | 21 |
1 | 2 | 3 | 4 | 5 | 6 |
Maka langkah-langkah pengurtannya adalah :
Semula | 29 | 27 | 10 | 8 | 76 | 21 |
Iterasi 1 | 29 | 27 | 10 | 8 | 21 | 76 |
Iterasi 2 | 27 | 21 | 10 | 8 | 29 | 76 |
Iterasi 3 | 21 | 10 | 8 | 27 | 29 | 76 |
Iterasi 4 | 10 | 8 | 21 | 27 | 29 | 76 |
Iterasi 5 | 8 | 10 | 21 | 27 | 29 | 76 |
Procedure SelectionSort(input/output L : Larikint, input N : integer)
{mengurutkan elemen larik L[1..N] sehingga tersusun menaik dengan
metode pengurutan maksimum}
{k.awal : elemen larik L sudah terdefinisi harganya}
{k.akhir : elemen larik L terurut menaik sedemikian sehingga L[1] _ L[2] _
... _ L[N]}
Deklarasi
I : integer
J : integer {pencacah untuk mencari nilai maksimum}
Imaks : integer {indeks yang berisi nilai maksimum sementara}
Procedure tukar(input/output A : integer, input/output : B : integer)
{mempertukarkan nilai A dan B}
Deskripsi
For I _ N downto 2 do {jumlah pengulangan sebanyak N-1}
{cari elemen maksimum pada elemen L[1..I]}
Imaks _ I {elemen pertama diasumsikan sebagai
elemen maksimum sementara}
For J _ 2 to I do
If L[J] > L[Imaks] then
Imaks _ J
Endif
Endfor
{pertukarkan L[Imaks] dengan L[I]}
Tukar(L[Imaks], L[I])
Endfor
B pengurutan pilih minimum
misalkan larik L dengan n=6 sebagai berikut
29 | 27 | 10 | 8 | 76 | 21 |
1 | 2 | 3 | 4 | 5 | 6 |
Maka langkah-langkah pengurtannya adalah :
Semula | 29 | 27 | 10 | 8 | 76 | 21 |
Iterasi 1 | 8 | 29 | 27 | 10 | 76 | 21 |
Iterasi 2 | 8 | 10 | 29 | 27 | 76 | 21 |
Iterasi 3 | 8 | 10 | 21 | 29 | 27 | 76 |
Iterasi 4 | 8 | 10 | 21 | 27 | 76 | 29 |
Iterasi 5 | 8 | 10 | 21 | 27 | 29 | 76 |
Procedure SelectionSort(input/output L : larikint, input N : integer)
{mengurutkan elemen larik L[1..N] sehingga tersusun menaik dengan
metode pengurutan pilih minimum}
{k.awal : elemen larik L sudah terdefinisi harganya}
{k.akhir : elemen larik L terurut menaik sedemikian sehingga L[1] _ L[2] _
... _ L[N]}
Deklarasi
I : integer
J : integer {pencacah untuk mencari nilai maksimum}
Imin : integer {indeks yang berisi nilai maksimum sementara}
Procedure Tukar(input/output A : integer, input/output : B : integer)
{mempertukarkan nilai A dan B}
Deskripsi
For I _ 1 to N-1 do
{cari indeks dari elemen minimum di dalam larik L[I..N]}
Imin _ I
For J _ I+1 to N do
If L[J] > L[Imin] then
Imin _ J
Endif
Endfor
{pertukarkan L[Imin] dengan L[I]}
Tukar(L[Imin], L[I])
Endfor