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
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.