Algoritma pengurutan (sorting algorithm) · PDF fileAlgoritma Bubble Sort Prinsip pengapungan...

Post on 12-Mar-2018

274 views 5 download

Transcript of Algoritma pengurutan (sorting algorithm) · PDF fileAlgoritma Bubble Sort Prinsip pengapungan...

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.