Pendahuluan
Pengurutan / sorting adalah proses mengatur sekumpulan objek menurut urutan atau susunan tertentu.
Banyak algoritma pengurutan:
Klarsifikasi algoritma pengurutan:
Algoritma Pengurutan Apung / Bubble Sort
Terinspirasi oleh gelembung sabun yang berada diatas permukaan air.
Jika L[k] < L[k-1] maka
tukarkan L[k] dengan L[k-1]
Contoh bilangan belum terurut:
25 |
27 |
10 |
8 |
76 |
21 |
|
1 |
2 |
3 |
4 |
5 |
6 |
|
P1 |
8 |
25 |
27 |
10 |
21 |
76 |
P2 |
8 |
10 |
25 |
27 |
21 |
76 |
P2 |
8 |
10 |
21 |
25 |
27 |
76 |
procedure BubbleSort(var L: LarikEmerer; n:integer);
Deklarasi:
i,k,temp : integer;
Algoritma:
for i ß 1 to n-1 do
for k ß n downto i+1 do
if L[k] < L[k-1] then
begin
temp ß L[k];
L[k] ß L[k-1];
L[k-1] ß temp;
end;
Algoritma Pengurutan Seleksi / Selection Sort
Dengan cara memilih elemen maksimum/minimum dari larik, lalu menempatkan elemen maksimum/minimum itu pada akhir/awal larik (elemen terujung).
Contoh bilangan yang akan diurutkan:
29 |
27 |
10 |
8 |
76 |
21 |
|
1 |
2 |
3 |
4 |
5 |
6 |
|
P1 |
29 |
27 |
10 |
8 |
21 |
76 |
P2 |
21 |
27 |
10 |
8 |
29 |
76 |
P3 |
21 |
8 |
10 |
27 |
29 |
76 |
P4 |
10 |
8 |
21 |
27 |
29 |
76 |
P5 |
8 |
10 |
21 |
27 |
29 |
76 |
procedure MaksSelectionSort(var L: LarikEmerer; n:integer);
var i,j,imaks,temp: integer;
begin
for i:=n downto 2 do
begin
imaks := 1;
for j:= 2 to i do
if L[j] > L[imaks] then
imaks := j;
temp := L[imaks];
L[imaks] := L[i];
L[i] := temp;
end; end;
procedure MinSelectionSort(var L: LarikEmerer; n:integer);
var i,j,imin,temp: integer;
begin
for i:=1 to n-1 do
begin
imin := i;
for j:= i+1 to n do
if L[j] < L[imin] then
imin := j;
temp := L[imin];
L[imin] := L[i];
L[i] := temp;
end;
end;
Algoritma Pengurutan Sisip / Insertion Sort
Adalah metode pengurutan dengan cara menyisipkan elemen larik pada posisi yang tepat. Pencarian posisi yang tepat dilakukan dengan cara menyisir larik.
29 |
27 |
10 |
8 |
76 |
21 |
|
1 |
2 |
3 |
4 |
5 |
6 |
|
P1 |
29 |
27 |
10 |
8 |
76 |
21 |
P2 |
10 |
27 |
29 |
8 |
76 |
21 |
P3 |
8 |
10 |
27 |
29 |
76 |
21 |
P4 |
8 |
10 |
27 |
29 |
76 |
21 |
P5 |
8 |
10 |
21 |
27 |
29 |
76 |
procedure InsertSort(var L: LarikEmerer; n:integer);
var i,j,y: integer;
ketemu: boolean;
begin
for i:=2 to n do
begin
y := L[i];
j := i-1;
ketemu := false;
while (j>=1) and (not ketemu) do
begin
if y < L[j] then
begin
L[j+1] := L[j];
j := j-1 ;
end
else
ketemu := true;
end;
L[j+1] := y ;
end;
end;
Algoritma Pengurutan Shell
Ditemukan oleh Donald Shell tahun 1959. Yang merupakan perbaikan dari pengurutan sisip yang pergeseran elemennya terlalu jauh/banyak.
Dengan cara mengurutkan larik setiap k elemen dengan metode pengirutan sisip.
81 | 94 | 11 | 96 | 12 | 35 | 17 | 95 | 28 | 58 | 41 | 75 | 15 |
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 |
Tidak seorangpun pernah dapat menganalisis algoritma pengurutan Shell secara tepat, karena pemilihan ukuran step didasarkan pada pertimbangan sugesti.
procedure ShellSort(var L: LarikEmerer; n:integer) ;
var step,start: integer;
begin
step := n ;
while step>1 do
begin
step := step div 3 + 1;
for start := 1 to step do
InsSort(L, N, start, step);
end; end;
procedure InsSort(var L:LarikEmerer ; n, start, step:integer);
var i,j,y: integer;
ketemu: boolean;
begin
i := start + step;
while i<= n do
begin
y := L[i];
j := i-step;
ketemu:=false;
while (j>=1) and (not ketemu) do
begin
if y < L[j] then
begin
L[j+step] := L[j];
j := j-step ;
end
else
ketemu := true;
end;
L[j+step] := y ;
i := i+step;
end;
end;
Daftar Pustaka:
Munir, Rinaldi. 2007. Algoritma dan pemrograman dalam Bahasa Pascal dan C, Penerbit informatika. Bandung.
1 Comment
maaf kang sebelumnya,apa ada contoh program radix sort menggunakan pascal,kalo ada,share ya kang..makasih