Altien Jonathan Rindengan, S.Si, M.Kom

  

Altien Jonathan Rindengan, S.Si, M.Kom Pendahuluan 

  Sorting (pengurutan) : proses mengatur sekumpulan objek menurut urutan atau susunan tertentu 

  Diberikan array L dengan n elemen yg sudah terdefinisi elemen-elemennya.

   Urutan array tersusun secara menaik (ascending) : L[1] ≤ L[2] ≤ … ≤ L[n]

   Urutan array tersusun secara menurun (descending) : L[1] ≥ L[2] ≥ … ≥ L[n]

  Pendahuluan … 

  23, 27, 45, 67, 100,133 (data bertipe integer terurut naik) 

  50.37, 31, 20.3, 19.5, 0.4, -3.2, -10.9 (data bertipe real terurut turun) 

  „Amir‟, „Badu‟,‟Budi‟, „Eno‟,‟Rudi‟, „Zamri‟ (data bertipe string terurut naik) 

  „d‟,‟e‟,‟g‟,‟i‟,‟x‟

(data bertipe karakter terurut naik)

  

Jenis-jenis Algoritma Pengurutan

  Bubble Sort 

  Selection Sort (Maximum Sort & Minimum Sort) 

  Insertion Sort 

  Heap Sort 

  Shell Sort 

  Quick Sort 

  Merge Sort 

  Radix Sort 

  Tree Sort Jenis-jenis Algoritma Pengurutan … 

  

Bubble Sort & Selection Sort : melakukan prinsip

pertukaran elemen dalam proses pengurutan (exchange sort)

  

Radix Sort & Tree Sort : melakukan prinsip geser

dan sisip elemen dalam proses pengurutan (shift & insert sort)

   Heap Sort & Tree Sort, memerlukan konsep tree

  Algoritma Bubble Sort 

  Bubble sort (pengurutan apung) : diinspirasi oleh gelembung sabun yang berada di atas permukaan air 

  Karena berat jenis gelembung sabun lebih ringan daripada berat jenis air, maka gelembung sabun selalu terapung di atas permukaan air

   Secara umum, benda berat akan terbenam dan benda ringan akan terapung

  Algoritma Bubble Sort … 

  Prinsip pengapungan : 

  Jika kita menginginkan array teruurut naik, maka elemen array yang bernilai paling kecil “diapungkan” artinya diangkat ke

  “atas” (ujung kiri array) melalui proses pertukaran 

  

Proses pengapungan dilakukan sebanyak n-1 langkah (

1langkah = 1pass), n adalah ukuran array 

  Pada akhir setiap langkah ke-i, array L[1..n] akan terdiri dari 2 bagian : 

  Terurut : L[1..i] 

  Belum terurut : L[i+1..n] 

  Langkah terakhir diperoleh array L[1..n] yang terurut naik Algoritma Bubble Sort … 

  Algoritmanya (terurut naik): Untuk setiap pass i =1,2,…,n-1,lakukan : Mulai dari elemen k=n,n-

  1,…,i+1, lakukan: 1.

  Bandingkan L[k] dengan L[k-1] 2. Pertukarkan L[k] dengan L[k-1] jika L[k]<L[k-1] Algoritma Bubble Sort … 

  Rincian setiap pass sebagai berikut : Pass 1 :

  • Mulai dari elemen ke-k = n,n- 1,…,2, bandingkan

    L[k] dengan L[k-1]. Jika L[k]<L[k-1], pertukarkan

    L[k] dengan L[k-1]. Pada akhir langkah 1, elemen L[1] berisi harga minimum pertama

  Pass 2 :

  • Mulai dari elemen ke-k = n,n- 1,…,3, bandingkan

    L[k] dengan L[k-1]. Jika L[k]<L[k-1], pertukarkan

    L[k] dengan L[k-1]. Pada akhir langkah 2, elemen L[1] berisi harga minimum kedua. Larik L[1..2]

  Algoritma

Bubble Sort …

Pass 3 :

  • Mulai dari elemen ke-k = n,n- 1,…,4, bandingkan L[k] dengan L[k-1]. Jika L[k]<L[k-1], pertukarkan L[k] dengan L[k-1]. Pada akhir langkah 3, elemen L[3] berisi harga minimum ketiga. Larik L[1..3] terurut, sedangkan L[4..n] belum terurut Pass n-1 :
  • Mulai dari elemen ke-k = n, bandingkan L[k] dengan L[k-1]. Jika L[k]<L[k-1], pertukarkan L[k] dengan L[k-1]. Pada akhir langkah n-1, elemen L[n-1] berisi harga minimum ke-(n-1). Larik L[1..n-1] terurut, sedangkan L[n]

   Contoh array dengan 6 elemen :

  Algoritma Bubble Sort … 25 27 10 8 76 21

  1

  2

  3

  4

  5

  6

  • Pass 1:

  k elemen yg dibandingkan pertukarkan? hasil sementara k=6 L[6]<L[5]? (21 < 76?) ya 25, 27, 10, 8, 21, 76 k=5 L[5]<L[4]? (21 < 8?) tidak 25, 27, 10, 8, 21, 76 k=4 L[4]<L[3]? (8 <10?) ya 25, 27, 8, 10, 21, 76 k=3 L[3]<L[2]? (8 <27?) ya 25, 8, 27, 10, 21, 76 k=2 L[2]<L[1]? (8 <25?) ya 8, 25, 27, 10, 21, 76

  8 25 27 10 21 76

  • Pass 2:

  , 10, 25, 27, 21, 76

  5

  4

  3

  2

  1

  8 10 25 27 21 76

  8

  Algoritma Bubble Sort … k

  , 25, 10, 27, 21, 76 k=3 L[3]<L[2]? (10 < 25?) ya

  8

  , 25, 27, 10, 21, 76 k=4 L[4]<L[3]? (10 < 27?) ya

  8

  , 25, 27, 10, 21, 76 k=5 L[5]<L[4]? (21 < 10?) tidak

  8

  elemen yg dibandingkan pertukarkan? hasil sementara k=6 L[6]<L[5]? (76 < 21?) tidak

  6

  • Algoritma Bubble Sort …

  ,

  5

  4

  3

  2

  1

  8 10 21 25 27 76

  , 21, 25, 27, 76

  10

  8

  k

  , 25, 21, 27, 76 k=4 L[4]<L[3]? (21 < 25?) ya

  10

  ,

  8

  , 25, 27, 21, 76 k=5 L[5]<L[4]? (21 < 27?) ya

  10

  ,

  8

  elemen yg dibandingkan pertukarkan? hasil sementara k=6 L[6]<L[5]? (76 < 21?) tidak

  6

  • Algoritma Bubble Sort …

  ,

  5

  4

  3

  2

  1

  8 10 21 25 27 76

  , 25, 27, 76

  21

  10

  k

  ,

  8

  , 25, 27, 76 k=5 L[5]<L[4]? (27 < 25?) tidak

  21

  ,

  10

  ,

  8

  elemen yg dibandingkan pertukarkan? hasil sementara k=6 L[6]<L[5]? (76 < 27?) tidak

  6 Algoritma Bubble Sort …

  • k

  elemen yg dibandingkan pertukarkan? hasil sementara

  8

  10

  21

  25

  k=6 L[6]<L[5]? (76 < 27?) tidak , , , , 27, 76

  8 10 21 25 27 76

  1

  2

  3

  4

  5

  6 Sudah terurut:

  • 8 10 21 25 27 76
program urut_bubble; uses crt; const nmaks=1000; var L:array[1..nmaks] of integer; n,i,k,temp:integer; begin clrscr; write('Jumlah data : ');readln(n);writeln; write('Data belum terurut:'); for i:=1 to n do begin gotoxy(4*i,5);read(L[i]); end; for i:=1 to n-1 do begin for k:=n downto i+1 do begin if L[k] < L[k-1] then begin temp:=L[k];

  L[k]:=L[k-1]; L[k-1]:=temp; end; writeln; writeln('Data setelah pengurutan :'); for i:=1 to n do begin gotoxy(4*i,9);writeln(L[i]); end; writeln; readln; end.

  Algoritma Selection Sort 

  Gagasannya memilih elemen maksimum/minimum dari array, lalu menempatkannya apda awal atau akhir array

   Selanjutnya elemen tersebut “diisolasi” dan tidak disertakan pada proses selanjutnya.

   Proses ini diulang untuk elemen array yang tersisa

   Ada 2 varian selection sort :

   Maximum selection sort : memilih elemen maksimum sebagai basis pengurutan

   Minimum selection sort : memilih elemen minimum sebagai basis pengurutan Maximum selection sort 

  Untuk array terurut menaik : 

  Jumlah pass = n-1 

  Untuk setiap pass i =1,2,…jumlah pass, lakukan :

  Pertukarkan elemen maks dengan elemen ke-n 3. Kurangi n satu (karena elemen ke-n sudah terurut) Maximum selection sort … Pass 1 :

  Cari elemen maks di dalam L[1..n] 

  Pertukarkan elemen maks dengan elemen L[n] 

  Ukuran array yang belum terurut = n-1 Pass 2 :

  Cari elemen maks di dalam L[1..n-1] 

  Pertukarkan elemen maks dengan elemen L[n-1] 

  Ukuran array yang belum terurut = n-2 Pass n-1 :

  Cari elemen maks di dalam L[1..2] 

  Pertukarkan elemen maks dengan elemen L[2] 

  Ukuran array yang belum terurut = 1

  6 Maximum selection sort …

  6

  5

  4

  3

  2

  1

  29 27 10 8 21 76

  5

   Contoh array dengan 6 elemen :

  4

  3

  2

  1

  29 27 10 8 76 21

  • Pass 1:

   Pertukarkan maks dengan L[6], diperoleh

   Cari elemen maks di array L[1..6], diperoleh maks=L[5]=76 Maximum selection sort … Pass 2:

  Cari elemen maks di array L[1..5], diperoleh maks=L[1]=29 

  Pertukarkan maks dengan L[5], diperoleh 21 27 10 8 29 76

  1

  2

  3

  4

  5

  6 Pass 3:

  Cari elemen maks di array L[1..4], diperoleh maks=L[2]=27 

  Pertukarkan maks dengan L[4], diperoleh

  21 8 10 27 29 76 Maximum selection sort … Pass 4:

  Cari elemen maks di array L[1..3], diperoleh maks=L[1]=21 

  Pertukarkan maks dengan L[3], diperoleh

  10 8 21 27 29 76

  1

  2

  3

  4

  5

  6 Pass 5:

  Cari elemen maks di array L[1..2], diperoleh maks=L[1]=10 

  Pertukarkan maks dengan L[2], diperoleh 8 10 21 27 29 76 Maximum selection sort …

8 10 21 27 29 76

  • Tinggal satu elemen L[1]=8, maka pengurutan selesai dengan L yang terurut adalah

  1

  2

  3

  4

  5

  6 program urut_selection_max; uses crt; const nmaks=1000; var L:array[1..nmaks] of integer; n,i,j,imaks,temp:integer; begin clrscr; write('Jumlah data : ');readln(n);writeln; write('Data belum terurut:'); for i:=1 to n do begin gotoxy(4*i,5);read(L[i]); end; for i:=n downto 2 do begin imaks:=1; for j:=2 to i do begin if L[j] > L[imaks] then imaks:=j; end; temp:=L[imaks]; L[imaks]:=L[i]; L[i]:=temp;

writeln; writeln('Data setelah pengurutan :'); for i:=1 to n do begin gotoxy(4*i,9);writeln(L[i]); end; writeln; readln; end.