Jumat, 30 Maret 2012

Sorting Algorithm ( Algoritma Pengurutan)

Sorting Algorithm


Sorting dan searching merupakan salah satu operasi dasar dalam ilmu komputer. Sorting merupakan suatu proses (operasi) yang mengurutkan data dalam suatu urutan yang diberikan (increasing atau decreasing). 

Terdapat 2 katagori dasar dalam tehnik sorting : internal sort dan external sort. Metoda Internal sort digunakan apabila koleksi data yang akan diurutkan tidak dalam jumlah besar sehingga proses dapat dilakukan dalam main memory. Metoda External sort digunakan apabila koleksi data yang akan diurutkan dalam jumlah besar dimana koleksi data tersebut ada dalam auxiliary memory device seperti magnetic tape atau disk.
(Yang akan di bahas adalah Internal Sort).

            Misal A merupakan suatu daftar dari n elemen A1, A2, ..., An dalam memori.  Sorting A merupakan operasi yang mengatur elemen dalam A sehingga ada dalam urutan yang terurut, misal dalam increasing order sehingga :

                                                A1  A2  A3  ..... An

Contoh :
            Misal suatu array DATA berisi 8 elemen sebagai berikut :

                                    DATA :                77, 33, 44, 11, 88, 22, 66, 55
           
            Setelah diurutkan  :
           
                                    DATA :                 11, 22, 33, 44, 55, 66, 77, 88




Insertion Sort


            Misal array A dengan n elemen A[1], A[2], ..... , A[N] dalam memori. Algoritma Insertion Sort memeriksa A dari A[1] sampai dengan A[N], menyisipkan setiap elemen A[K] ke dalam posisi yang seharusnya dalam subarray terurut A[1], A[2], ..... , A[K-1].
           
            Algoritma sorting ini umumnya digunakan apabila jumlah elemennya sedikit           (n kecil). Masalah yang akan muncul dengan metoda ini adalah bagaimana cara menyisipkan A[K] ke dalam letak yang seharusnya pada subarray terurut A[1], A[2], ....., A[K-1]. Hal ini dapat dilakukan dengan membandingkan A[K] dengan A[K-1], kemudian A[K] dengan A[K-2], A[K] dengan A[K-3] dan seterusnya, sampai menemukan elemen A[J] dimana A[J] A[K].

Algoritma ini menggunakan sentinel elemen (A[0]) yang digunakan sebagai perbandingan. Yang dimaksud dengan sentinel elemen adalah elemen yang memiliki nilai yang sangat kecil.

Penggambaran proses Insertion Sort :

Proses
A[0]
A[1]
A[2]
A[3]
A[4]
A[5]
A[6]
A[7]
A[8]










K = 1:
-
77
33
44
11
88
22
66
55










K = 2:
-
77
33
44
11
88
22
66
55










K = 3:
-
33
77
44
11
88
22
66
55










K = 4:
-
33
44
77
11
88
22
66
55










K = 5:
-
11
33
44
77
88
22
66
55










K = 6:
-
11
33
44
77
88
22
66
55










K = 7:
-
11
22
33
44
77
88
66
55










K = 8:
-
11
22
33
44
66
77
88
55










Urutan :
-
11
22
33
44
55
66
77
88
           
Tabel 1.1         




Selection Sort

      Array A dengan n elemen A[1], A[2], ....., A[N] dalam memori. Algoritma untuk mengurutkan A sebagai berikut : Pertama, cari elemen terkecil dalam array A dan letakkan pada posisi pertama dalam array tersebut. Kemudian cari elemen kedua terkecil dalam array A dan letakkan dalam posisi kedua dari array tersebut, dan begitu seterusnya.

Proses 1 :  Cari lokasi LOC yang merupakan elemen terkecil dalam array yang
                  terdiri   dari N elemen , A[1], A[2], ...., A[N] dan kemudian tukar posisi
                  A[LOC] dengan A[1].

Proses 2 :  Cari lokasi LOC yang merupakan elemen terkecil dalam array yang
                  terdiri dari N-1 elemen , A[2], A[3], ...., A[N] dan tukar posisi A[LOC]
                  dengan A[2]. A[1] , A[2] terurut, jika dan hanya jika A[1] A[2].

Proses 3 :  Cari lokasi LOC yang merupakan elemen terkecil dalam array yang
                  terdiri dari N-2 elemen, A[3], A[4],......, A[N] dan tukar posisi A[LOC]
                  dengan A[3]. A[1], A[2], A[3] terurut, jika dan hanya jika A[2] A[3].
Dst.................

Sehingga A akan terurut setelah N-1 proses.


Merging


            Misal A merupakan himpunan data terurut dengan r buah elemen dan B himpunan data terurut dengan s buah elemen. Proses yang menggabungkan elemen-elemen dalam A dan B menjadi himpunan elemen data terurut tunggal, misal C dengan n = r + s buah elemen disebut dengan proses Merging.

Secara singkat, proses Merging dapat dijelaskan sebagai berikut ; ambil elemen pertama dari A, A[1] dan B, B[1]. Bandingkan kedua elemen tersebut. Jika A[1] > B[1], B[1] dimasukkan dalam C, jika tidak A[1] dimasukkan dalam C. Untuk himpunan data yang elemennya dimasukkan dalam C, elemen yang akan dibandingkan adalah elemen berikutnya. Dan seterusnya.

Contoh :
            A = 11   12   23   33   45     67
            B = 9     12   21   42

            Disini A[1] = 11 dan B[1] = 9 dibandingkan dan A[1] > B[1], B[1] dimasukkan dalam C. Pembandingan berikutnya A[1] = 11 dibandingkan dengan B[2] = 12, A[1] dimasukkan dalam C, dan begitu seterusnya.

Shell Sort

            Disebut juga dengan metoda pertambahan menurun (diminishing increment). Metoda ini dikembangkan oleh Donald L. Shell tahun 1959. Metoda ini memanfaatkan penukaran sepasang elemen untuk mencapai keadaan urut. Dalam hal ini jarak dua elemen yang dibandingkan dan ditukarkan tertentu.

            Pada langkah pertama, ambil elemen pertama dan kita bandingkan dengan elemen pada jarak tertentu dari elemen pertama tersebut. Kemudian elemen kedua dibandingkan dengan elemen lain dengan jarak yang sama. Demikian seterusnya sampai seluruh elemen dibandingkan.

            Pada contoh berikut, proses pertama kali jarak diambil separoh banyaknya elemen yang akan diurutkan. Proses kedua jaraknya diambil separuh jarak yang pertama, dst....

Misal terdapat elemen sebagai berikut :

                        23        45        12        24        56        34        27        23        16

Proses pengurutan menggunakan metoda Shell ada pada tabel 1.3. Dalam hal ini elemen yang ditulis miring adalah elemen yang dibandingkan dan kemudian ditukar, jika perlu.
  
Jarak
A[1]
A[2]
A[3]
A[4]
A[5]
A[6]
A[7]
A[8]
A[9]










Awal
23
45
12
24
56
34
27
23
16










Jarak = 4
23
45
12
24
56
34
27
23
16

23
45
12
24
56
34
27
23
16

23
34
12
24
56
45
27
23
16

23
34
12
24
56
45
27
23
16

23
34
12
23
56
45
27
24
16

23
34
12
23
16
45
27
24
56










Jarak = 2
23
34
12
23
16
45
27
24
56

12
34
23
23
16
45
27
24
56

12
23
23
34
16
45
27
24
56

12
23
16
34
23
45
27
24
56

12
23
16
34
23
45
27
24
56

12
23
16
34
23
45
27
24
56

12
23
16
34
23
24
27
45
56

12
23
16
34
23
24
27
45
56










Jarak = 1
12
23
16
34
23
24
27
45
56

12
23
16
34
23
24
27
45
56

12
16
23
34
23
24
27
45
56

12
16
23
34
23
24
27
45
56

12
16
23
23
34
24
27
45
56

12
16
23
23
24
34
27
45
56

12
16
23
23
24
27
34
45
56

12
16
23
23
24
27
34
45
56

12
16
23
23
24
27
34
45
56










Akhir
12
16
23
23
24
27
34
45
56





Berikut ini adalah beberapa contoh algoritma Sorting:


Pengurutan Sisip (Insertion Sort)



Kamus Lokal
K : integer {pencacah langkah}
J : integer {pencacah untuk penelusuran larik}
Temp : integer {peubah bantu untuk agar L[K] tidak ditimpa selama pergeseran}
       
       ALGORITMA
{elemen L[1] dianggap sudah terurut}
for K ← 2 to N do {mulai dari langkah 2 sampai langkah N}
Temp ← L[K] {ambil elemen L[K] supaya tidak ditimpa pergeseran}
{cari posisi yang tepat untuk L[K] di dalam L[1..K-1] sambil menggeser}
J ← K - 1
while Temp ≤ L[J] AND (J > 1) do
L[J+1] ← L[J]
J ← J-1
endwhile
if Temp ≥ L[J] then
L[J+1] ← Temp
else
L[J+1] ← L[J]
L[J] ← Temp
endif
endfor


Pengurutan Sisip (Insertion Sort)


procedure UrutSisip_Turun(input/output L: Larik, input N : integer)
Kamus Lokal
K : integer {pencacah langkah}
J : integer {pencacah untuk penelusuran larik}
Temp : integer {peubah bantu untuk agar L[K] tidak ditimpa selama pergeseran}
ALGORITMA
{elemen L[1] dianggap sudah terurut}
for K 2 to N do {mulai dari langkah 2 sampai langkah N}
Temp L[K] {ambil elemen L[K] supaya tidak ditimpa pergeseran}
{cari posisi yang tepat untuk L[K] di dalam L[1..K-1] sambil menggeser}
J K - 1
while Temp L[J] AND (J > 1) do
L[J+1] L[J]
J J-1
endwhile
{Temp > L[J] or J = 1}
if Temp L[J] then
L[J+1] Temp
else
L[J+1] L[J]
L[J+1] Temp
endif
endfor


Algoritma Selection Sort


{cari elemen terkecil}
t := i {t adalah index elemen terkecil}
for j := i + 1 to n do
              if l[j] < l[t] then
                     t := j
              endif
endfor
{tukar elemen terkecil dengan elemen i}
       temp := l[j]
       l[j] := l[i]
       l[i] := temp

for i := 1 to n – 1 do
              {cari elemen terkecil}
              t := i {t adalah index elemen terkecil}
              for j := i + 1 to n do
                     if l[j] < l[t] then
                            t := j
                     endif
              endfor
              {tukar elemen terkecil dengan elemen i}
              temp := l[j]
              l[j] := l[i]
              l[i] := temp
endfor


Algoritma Selection Sort

proc UrutPilih (l,n)
{mengurutkan membesar data di dalam larik l yang berelemen sebanyak n dengan cara pemilihan}

for i := 1 to n – 1 do
       {cari elemen terkecil}
       t := i {t adalah index elemen terkecil}
       for j := i + 1 to n do
              if l[j] < l[t] then
                     t := j
              endif
       endfor
       {tukar elemen terkecil dengan elemen i}
              temp := l[j]
              l[j] := l[i]
              l[i] := temp
endfor



Algoritma Shell Sort


Banyak = N
range = banyak / 2
while range <> 0
       counter = 1
       target = banyak-range
while counter<=target
              kiri = counter
              selesai = false
              while selesai=false
                     kanan = kiri+range
if item (kiri)>= item(kanan)
                                  selesai = true
                            else
                                  swap item (kiri) dan
                                  item (kanan)
                                  if kiri > range
                                         kiri = kiri - range
                                  else
                                         selesai = true
                                  end_if
                            end_if
                     end_while
                     counter = counter + 1
               end_while
              range = range / 2
end_while









Pengurutan Gravitasi

procedure UrutGravitasi(input/output L: Larik; input N : integer)

Deklarasi
I : integer {pencacah untuk jumlah langkah}
K : integer {pencacah untuk pemberatan pada setiap langkah}
U : integer {indeks ujung kiri bagian larik yang telah terurut}
Temp : integer {peubah bantu untuk pertukaran}

Algoritma
← N
for I ← 1 to N-1 do
for K ← 1 to U-1 do
if L[K] > L[K+1] then {pertukarkan L[K] dengan L[K+1]}
Temp ← L[K]
L[K] ← L[K-1]
L[K-1] ← Temp
endif
endfor
{ larik L[U..N] terurut, larik L[1..U-1] belum terurut }
← U - 1
Endfor



Algoritma Pengurutan Maksimum

procedure UrutMaksimum(input/output L: Larik, input N : integer)
Kamus Lokal
I : integer {pencacah untuk jumlah langkah}
J : integer {pencacah untuk mencari nilai maksimum}
U : integer {indeks ujung kiri bagian larik yang telah terurut}
Maks : integer {nilai maksimum sementara}
Imaks : integer {indeks yang berisi nilai maksimum sementara}
Temp : integer {peubah bantu untuk pertukaran}
Algoritma
U ← N
for I ← 1 to N-1 do
Maks ← L[1]
Imaks ← 1
for J ← 2 to U do
if L[J] > L[Imaks] then
Maks ← L[J]
Imaks ← J
endif
endfor
{pertukarkan Maks dengan L[U]}
Temp ← L[U]
L[U] ← L[Imaks]
L[Imaks] ← Temp
{ larik L[U..N] terurut, larik L[1..U-1] belum terurut }
U ← U - 1
endfor


Algoritma Pengurutan Minimum


procedure UrutMin(input/output L: Larik, input N : integer)
Kamus Lokal
I : integer {pencacah untuk jumlah langkah}
J : integer {pencacah untuk mencari nilai minimum}
U : integer {indeks ujung kiri bagian larik yang telah terurut}
Imin : integer {indeks yang berisi nilai minimum sementara}
Temp : integer {peubah bantu untuk pertukaran}
Algoritma
U ← N
for I ← 1 to N-1 do
Imin ← 1
for J ← 2 to U do
if L[J] < L[Imin] then
Imin ← J
endif
endfor
{pertukarkan Maks dengan L[U]}
Temp ← L[U]
L[U] ← L[Imin]
L[Imin] ← Temp
{ larik L[U..N] terurut, larik L[1..U-1] belum terurut }
U ← U - 1
endfor







AKU DENGAR BISIKAN SUARAMU

AKU DENGAR BISIKAN SUARAMU   Aku dengar bisikan suaraMu Menggema lembut di dalam batinku Sungguh engkau sahabatKu Jikalau eng...