DATA SORTING
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) :
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‟
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 prinsippertukaran elemen dalam proses pengurutan (exchange sort)
Radix Sort & Tree Sort : melakukan prinsip geser
dan sisip elemen dalam proses pengurutan (shift & insert sort)
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
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]
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]
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]
terurut, sedangkan L[3..n] belum terurut
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] pasti elemen terbesar sehingga L[1..n] terurut naik
Contoh array dengan 6 elemen :
Pass 1:
Algoritma Bubble Sort …
25 27 10 8 76 211 2 3 4 5 6
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 1 2 3 4 5 6
Pass 2:
Algoritma Bubble Sort …
k elemen yg dibandingkan pertukarkan? hasil sementara k=6 L[6]<L[5]? (76 < 21?) tidak 8, 25, 27, 10, 21, 76 k=5 L[5]<L[4]? (21 < 10?) tidak 8, 25, 27, 10, 21, 76 k=4 L[4]<L[3]? (10 < 27?) ya 8, 25, 10, 27, 21, 76 k=3 L[3]<L[2]? (10 < 25?) ya 8, 10, 25, 27, 21, 76 8 10 25 27 21 76 1 2 3 4 5 6
Pass 3:
Algoritma Bubble Sort …
k elemen yg dibandingkan pertukarkan? hasil sementara k=6 L[6]<L[5]? (76 < 21?) tidak 8, 10, 25, 27, 21, 76 k=5 L[5]<L[4]? (21 < 27?) ya 8, 10, 25, 21, 27, 76 k=4 L[4]<L[3]? (21 < 25?) ya 8, 10, 21, 25, 27, 76
8 10 21 25 27 76 1 2 3 4 5 6
Pass 4:
Algoritma Bubble Sort …
k elemen yg dibandingkan pertukarkan? hasil sementara k=6 L[6]<L[5]? (76 < 27?) tidak 8, 10, 21, 25, 27, 76 k=5 L[5]<L[4]? (27 < 25?) tidak 8, 10, 21, 25, 27, 76
8 10 21 25 27 76 1 2 3 4 5 6
Pass 5:
Sudah terurut:
Algoritma Bubble Sort …
k elemen yg dibandingkan pertukarkan? hasil sementara k=6 L[6]<L[5]? (76 < 27?) tidak 8, 10, 21, 25, 27, 76
8 10 21 25 27 76 1 2 3 4 5 6
8 10 21 25 27 76 1 2 3 4 5 6
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; end; 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
Maximum selection sort
Untuk array terurut menaik : Jumlah pass = n-1
Untuk setiap pass i =1,2,…jumlah pass, lakukan :
1. Cari elemen terbesar (maks), mulai dari elemen-1 sampai n 2. Pertukarkan elemen maks dengan elemen ke-n
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
Contoh array dengan 6 elemen :
Pass 1:
Cari elemen maks di array L[1..6], diperoleh
maks=L[5]=76
Pertukarkan maks dengan L[6], diperoleh
29 27 10 8 76 21 1 2 3 4 5 6
29 27 10 8 21 76 1 2 3 4 5 6
Pass 2:
Cari elemen maks di array L[1..5], diperoleh
maks=L[1]=29
Pertukarkan maks dengan L[5], diperoleh
Pass 3:
Cari elemen maks di array L[1..4], diperoleh
maks=L[2]=27
Pertukarkan maks dengan L[4], diperoleh
21 27 10 8 29 76 1 2 3 4 5 6
Maximum selection sort …
21 8 10 27 29 76 1 2 3 4 5 6
Pass 4:
Cari elemen maks di array L[1..3], diperoleh
maks=L[1]=21
Pertukarkan maks dengan L[3], diperoleh
Pass 5:
Cari elemen maks di array L[1..2], diperoleh
maks=L[1]=10
Pertukarkan maks dengan L[2], diperoleh
10 8 21 27 29 76 1 2 3 4 5 6
Maximum selection sort …
8 10 21 27 29 76 1 2 3 4 5 6
Tinggal satu elemen L[1]=8, maka pengurutan
selesai dengan L yang terurut adalah
Maximum selection sort …
8 10 21 27 29 76 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; end;
writeln;
writeln('Data setelah pengurutan :'); for i:=1 to n do begin gotoxy(4*i,9);writeln(L[i]); end; writeln; readln; end.