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]
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
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)
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 21
1 2 3 4 5 6
k elemen yg dibandingkan pertukarkan? hasil sementara
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
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
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
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
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
writeln;
writeln('Data setelah pengurutan :'); for i:=1 to n do
begin
gotoxy(4*i,9);writeln(L[i]); 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]
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
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
Tinggal satu elemen L[1]=8, maka pengurutan
selesai dengan L yang terurut adalah
Maximum selection sort …
8 10 21 27 29 76
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:');
writeln;
writeln('Data setelah pengurutan :'); for i:=1 to n do
begin
gotoxy(4*i,9);writeln(L[i]); end;