Anda di halaman 1dari 31

 Sorting adalah proses mengatur sekumpulan objek

menurut aturan atau susunan tertentu.


 Urutan objek tersebut dapat menaik (ascending = dari
data kecil ke data lebih besar) atau menurun
(descending = dari data besar ke data lebih kecil).
Ada 2 macam urutan dalam proses pengurutan:
1. Ascending
2. Descending
 Bila
N obyek disimpan dalam larik L, maka
pengurutan menaik berarti menyusun
elemen larik sedemikian sehingga:
L[1] ≤ L[2] ≤ L[3] ≤ … ≤ L[N]

 Sedangkanpengurutan menurun berarti


menyusun elemen larik sedemikian
sehingga:
L[1] ≥ L[2] ≥ L[3] ≥ … ≥ L[N]
 Data yang diurut dapat berupa data bertipe
numerik dasar atau tipe bentuk.
 Jika data bertipe bentukan (rekaman), maka
harus dijelaskan berdasarkan field apa data
tersebut diurutkan.
Contoh:
1. 23, 27, 45, 67 (data integer terurut menaik)
2. 25.12, 20.19,-12.20 (data riil terurut menurun)
3. Amir, Badu, Budi, Dudi (data string terurut
manaik)
4. <08053110001, Eko, A>, < 08053110011,
Reza, C>, <08053110012, Sam, E> (data
mahasiswa terurut menaik berdasarkan field
NIM
 Mempercepat pencarian
 Mudah menentukan data maksimum / minimum.
• Pengurutan Internal adalah pengurutan
terhadap sekumpulan data yang disimpan di
dalam memori utama komputer. Umumnya
struktur data yang dipakai adalah larik, sehingga
pengurutan internal disebut juga pengurutan larik.

• Pengurutan Eksternal adalah pengurutan data


yang disimpan di dalam memori sekunder,
biasanya data bervolume besar sehingga tidak
mampu dimuat semuanya dalam memori
komputer, disebut juga pengurutan arsip (file),
karena struktur eksternal yang dipakai adalah
arsip.
 Algoritma sorting dasar:
 Bubble Sort
 Insertion Sort
 Selection Sort
 Algoritma sorting lanjutan:
 Merge Sort
 Quick Sort
 Bucket Sort
 Shell Sort
 Radix Sort
 External Sort
Untuk contoh di gunakan data bilangan bulat
berjumlah sembilan yaitu:

12 35 9 11 3 17 23 15 31

Kita akan mengurutkan data diatas menjadi


urut naik, seperti;

3 9 11 12 15 17 23 31 35
Ada 2 hal untuk menilai pengurutan yang baik:
1. Jumlah pembandingan yang dilakukan atau
sering disingkat dengan simbol C
2. Jumlah penukaran atau penggeseran data
yang dilakukan atau sering disingkat dengan
M
 Metode Bubble Sort diinspirasikan oleh
gelembung sabun yang berada dipermukaan air.
Karena berat jenis gelembung sabun lebih ringan
daripada berat jenis air, maka gelembung sabun
selalu terapung ke atas permukaan.
 Metode ini dilakukan dengan cara
membandingkan elemen yang sekarang dengan
yang berikutnya, jika elemen berikutnya lebih
kecil maka elemen ditukar
Untuk mendapatkan larik yang terurut menaik, proses yang dilakukan pada
setiap langkah sebagai berikut:

Langkah 1: Mulai elemen 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.
Langkah 2: Mulai elemen 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[2] berisi harga minimum kedua dan larik L[1..2] terurut.
Langkah N-1: Mulai elemen 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) dan
larik L[1..N-1] terurut menaik, sehingga elemen yang tersisa adalah L[N]
yang tidak perlu lagi diurutkan karena hanya satusatunya.
procedure UrutGelembung(input/output L: Larik; input N :
integer)

i : integer {pencacah untuk jumlah langkah}


K : integer {pencacah untuk pengapungan pada setiap langkah}
Temp : integer {peubah bantu untuk pertukaran}
Algoritma
for i ← 1 to N-1 do
for K ← N downto i+1 do
if L[K] < L[K-1] then {pertukarkan L[K] dengan L[K-1]}
Temp ← L[K]
L[K] ← L[K-1]
L[K-1] ← Temp
endif
endfor
endfor
SOAL LARIK : 23, 46, 20, 22, 14, 28, 34, 26, 41
{Program Buble Sort}
uses crt;
var i,j,k,temp,n :integer;
a,b,c :array[1..100] of integer;
begin
clrscr;
write('Banyaknya elemen Array : ');readln(n);
{input data}
for i:=1 to n do a[i];
{cetak array sebelum urut}
write('Sebelum diurutkan: ');
for i:=1 to n do write (a[i],' ');
writeln;
writeln('process pengurutan bubble : ');
for i:=1 to n-1 do
begin
for j:=n downto i+1 do
begin
if a[j-1]>a[j] then begin
temp:=a[j-1]; a[j-1]:=a[j]; a[j]:=temp;
End;
end;
{cetak array tiap langkah pengurutan}
writeln;write('hasil akhir langkah ke - ',i,' : ');
for k:=1 to n do write(a[k],' ');
end;
{cetak array setelah pengurutan}
writeln;writeln;
write('hasil pengurutan bubble : ');
for i:=1 to n do write (a[i],' ');
readln;
end.
 program bubble_sort_polma; begin
uses crt;
clrscr;
var write ('Masukkan banyak data yang
i,n,j : integer; ingin di urut : '); readln(n);
a : array [1..10] of integer; for i:=1 to n do
begin
procedure urutkan; write ('Data ',i,' : '); readln(a[i]);
var end;
z : integer; urutkan;
begin write('Data setelah diurutkan : ');
for i:=1 to n-1 do for j:=1 to n do
begin write (a[j],' ');
for j:=n downto i+1 do
readln;
begin
end.
if a[j] > a[j-1] then
begin
z:=a[j];
a[j]:=a[j-1];
a[j-1]:=z;
end;
end;
end;
end;
 Dilakukan dengan cara membandingkan data
ke-i (di mana i dimulai dari data ke-2 sampai
dengan data terakhir) dengan data
berikutnya.
 Jika ditemukan data yang lebih kecil maka
data tersebut disisipkan ke depan sesuai
dengan posisi yang seharusnya

Misalnya; pengurutan kartu


1. i2
2. Selama (i<=N) kerjakan baris 3 sampai
dengan10
3. x  Data[i]
4. Data[0]  x
5. ji– 1
6. Selama (x < Data[j] ) kerjakan baris 7 dan 8
7. Data [j+i]  Data [j]
8. jj–1
9. Data[j+1]  x
10. ii+1
Procedure Asc_Insert;
Var
i, j, temp : byte
Begin
For i := 2 to max do
Begin
Temp := data[i];
j :=i – 1;
While (data[j] > temp) and (j > 0) do
Begin
data[j + 1] := data [j];
dec(j)
End;
Data [j+1] := temp;
End;
End;

Sedang untuk pengurutan secara descending dilakukan dengan


mengganti baris Ke-8
While (data [ j ] < temp) and (j > 0) do
Iterasi ke-1 (Langkah 1)
i=1 2 3 4 5 6
22 10 15 3 8 2
Temp cek Geser
10 Temp < 22 Data ke-1 → Posisi 2

Temp menempati posisi ke-1


10 22 15 3 8 2
Iterasi ke-2 (Langkah 2)
i=1 2 3 4 5 6
10 22 15 3 8 2
Temp cek Geser
15 Temp < 22 Data ke-2 → Posisi 3
Temp > 10

Temp menempati posisi ke-2


10 15 22 3 8 2
Iterasi ke-3 (Langkah 3)
i=1 2 3 4 5 6
10 15 22 3 8 2
Temp cek Geser
3 Temp < 22 Data ke-3 → Posisi 4
Temp < 15 Data ke-2 → Posisi 3
Temp < 10 Data ke-1 → Posisi 2
Temp menempati posisi ke-1
3 10 15 22 8 2
Iterasi ke-4 (Langkah 4)
i=1 2 3 4 5 6
3 10 15 22 8 2
Temp cek Geser
8 Temp < 22 Data ke-4 → Posisi 5
Temp < 15 Data ke-3 → Posisi 4
Temp < 10 Data ke-2 → Posisi 3
Temp > 3
Temp menempati posisi ke-2
3 8 10 15 22 2
Iterasi ke-5 (Langkah 5)
i=1 2 3 4 5 6
3 8 10 15 22 2
Temp cek Geser
2 Temp < 22 Data ke-5 → Posisi 6
Temp < 15 Data ke-4 → Posisi 5
Temp < 10 Data ke-3 → Posisi 4
Temp < 8 Data ke-2 → Posisi 3
Temp < 3 Data ke-1 → Posisi 2
Temp menempati posisi ke-1
2 3 8 10 15 22

Terurut

2 3 8 10 15 22
Procedure StraightInsertionSort;
Var i, j , x : word;
Begin
for i := 2 to N do
begin
x := Data[i];
Data[0] := x;
j := i – 1;
while (x < Data[j]) do
begin
Data[j + 1] := Data[j];
dec (j);
end;
Data[j + 1] := x;
end;
End;
Buat pengurutan buble sort, selection sort,
insertion sort, dari bilangan di bawah ini :
23, 46, 20, 22, 14, 28, 34, 26, 41
 Metode ini dilakukan dengan cara membandingkan
elemen sekarang dengan elemen berikutnya,jika
ditemukan elemen yang lebih kecil dari elemen
sekarang maka dicatat posisinya dan kemudian
tukar data dari posisi sekarang ke posisi yang
terakhir dicatat tsb.
1. i1
2. Selama ( i <= N-1) kerjakan baris 3 sampai 9
3. ki
4. ji+1
5. Selama ( j <= N) kerjakan baris 6 dan 7
6. Jika (Data[k] > Data[j]) maka k  j
7. jj+1
8. Tukar Data[i] dengan Data[k]
9. ii+1
Procedure Asc_Selection;
Var
min, pos : byte ;
Begin
for i := 1 to max – 1 do
Begin
pos := i ;
for j := i+1 to max do
If data [j] < data [pos] then pos := j;
If i <> pos then TukarData(data[i], data [pos]);
End;
End;

Sedang untuk pengurutan secara descending dilakukan dengan


mengganti baris Ke-8
if data [pos] < data [j] then pos := j;
Procedure SelectionSort;
Var
i, j, k : word;
Begin
for i := 1 to N – 1 do
begin
k := i;
for j := i + 1 to N do
if (Data[k] > Data[j]) then
k := j;
Tukar (Data[i], Data[k]);
end;
End;
 50, 40, 60, 30, 70, 20, 90, 10, 100  nim
genap
 23, 46, 20, 22, 14, 28, 34, 26, 41  nim
ganjil
 Buat pengurutan seleksi (selection sort) dari
bilangan di atas.
 Buat pengurutan dengan metode Penyisipan
Langsung (straight insertion sort) dari
bilangan di atas.

Anda mungkin juga menyukai