Post on 12-Mar-2018
DATA SORTING
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 elemenarray yang bernilai paling kecil “diapungkan” artinyadiangkat ke “atas” (ujung kiri array) melalui prosespertukaran
Proses pengapungan dilakukan sebanyak n-1 langkah ( 1langkah = 1pass), n adalah ukuran array
Pada akhir setiap langkah ke-i, array L[1..n] akan terdiridari 2 bagian :
Terurut : L[1..i]
Belum terurut : L[i+1..n]
Langkah terakhir diperoleh array L[1..n] yang terurut naik
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, bandingkanL[k] dengan L[k-1]. Jika L[k]<L[k-1], pertukarkanL[k] dengan L[k-1]. Pada akhir langkah 1, elemenL[1] berisi harga minimum pertama
Pass 2 :
Mulai dari elemen ke-k = n,n-1,…,3, bandingkanL[k] dengan L[k-1]. Jika L[k]<L[k-1], pertukarkanL[k] dengan L[k-1]. Pada akhir langkah 2, elemenL[1] berisi harga minimum kedua. Larik L[1..2] terurut, sedangkan L[3..n] belum terurut
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] denganL[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 hargaminimum ke-(n-1). Larik L[1..n-1] terurut, sedangkan L[n] pasti elemen terbesar sehingga L[1..n] terurut naik
Algoritma Bubble Sort …
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 761 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 761 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 761 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 761 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 761 2 3 4 5 6
8 10 21 25 27 761 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 dariarray, lalu menempatkannya apda awal atau akhirarray
Selanjutnya elemen tersebut “diisolasi” dan tidakdisertakan pada proses selanjutnya.
Proses ini diulang untuk elemen array yang tersisa
Ada 2 varian selection sort :
Maximum selection sort : memilih elemen maksimum sebagaibasis pengurutan
Minimum selection sort : memilih elemen minimum sebagaibasis pengurutan
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
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
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 211 2 3 4 5 6
29 27 10 8 21 761 2 3 4 5 6
Maximum selection sort …
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 761 2 3 4 5 6
Maximum selection sort …
21 8 10 27 29 761 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 761 2 3 4 5 6
Maximum selection sort …
8 10 21 27 29 761 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 761 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.