• Selection Sort
• Insertion Sort
• Quick Sort
2
Sorting (Pengurutan)
3
Contoh :
Setelah diurutkan :
DATA (ascending) : 11, 22, 33, 44, 55, 66, 77, 88
4
Bubble Sort
5
Bubble Sort
• Dimulai dari elemen terakhir (paling kanan)
kemudian dibandingkan dengan elemen depannya
(sebelah kirinya).
• Bubble Sort mengurutkan data dengan cara
membandingkan elemen sekarang dengan elemen
berikutnya.
– Jika elemen sekarang lebih besar dari elemen berikutnya
maka kedua elemen tersebut ditukar, jika pengurutan
ascending.
– Jika elemen sekarang lebih kecil dari elemen berikutnya,
maka kedua elemen tersebut ditukar, jika pengurutan
descending
6
Bubble Sort
• Algoritma ini seolah-olah menggeser satu per satu
elemen dari kanan ke kiri atau kiri ke kanan,
tergantung jenis pengurutannya.
• Ketika satu proses telah selesai, maka bubble sort
akan mengulangi proses, demikian seterusnya.
• Kapan berhentinya? Bubble sort berhenti jika seluruh
array telah diperiksa dan tidak ada pertukaran lagi
yang bisa dilakukan, serta tercapai perurutan yang
telah diinginkan.
7
Ilustration Bubble Sort (1)
12
Ilustration Bubble Sort (2)
Data :
34,43,65,90,48,82,93,86,26,76,49,23,56,37
13
Ilustration Bubble Sort (2)
14
Ilustration Bubble Sort (2)
15
- Procedure Tukar
Procedure Tukar_Data (Var a, b : Word);
Var c :Word;
Begin
c := a;
a := b;
b := c;
End;
- Procedure Bubble Sort Ascending
Procedure Asc_Bubble (Var data : Array; JmlData : Integer);
Var i,j :Integer;
Begin
For I := 2 to JmlData do
For J := JmlData down to I do
If data[j] < data[j-1] then
TukarData (data[j], data[j-1]);
end;
Pengurutan Seleksi
23
Selection Sort
24
• Terdapat 4 variasi dalam pengurutan seleksi,
yaitu :
-Pengurutan naik: pemilihan maksimun,
ditempatkan dibagian akhir.
-Pengurutan naik: pemilihan minimum,
ditempatkan dibagian awal.
-Pengurutan turun: pemilihan maksimum,
ditempatkan dibagian awal.
-Pengurutan turun: pemilihan minimum,
ditempatkan dibagian akhir.
Ilustration (2)
Ilustration (2)
Ilustration (2)
Ilustration (2)
Ilustration (1)
30
- Procedure Selection Sort Ascending
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;
Pengurutan Sisip
32
Insertion Sort
• Mirip dengan cara mengurutkan kartu.
• Pengurutan dimulai dari data ke-2 sampai
dengan data terakhir, jika ditemukan data
yang lebih kecil, maka akan ditempatkan
(di-insert) diposisi yang seharusnya.
• Terjadi pergeseran data ke belakang.
Ilustration (1)
Ilustration (1)
Ilustration (1)
Ilustration (1)
Ilustration (1)
Ilustration (2)
- Procedure Insertion Sort Ascending
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;
41
Quick Sort
• Membandingkan suatu elemen (disebut pivot) dengan elemen yang lain
dan menyusun sedemikian rupa sehingga elemen-elemen lain yang
kecil daripada pivot tersebut terletak di sebelah kirinya dan elemen-
elemen lain yang lebih besar daripada tersebut terletak pada sebelah
kanannya.
• Sehingga dengan demikian terbentuk dua sublist kiri dan kanan yang
kita anggap sebuah list baru dan kita kerjakan proses yang sama
sebelumnya. Demikian seterusnya sampai tidak terdapat sublist lagi.
Sehingga di dalamnya telah terjadi proses rekursif.
Bilangan yang di dalam kurung merupakan pivot
Persegi panjang yang digambarkan dengan garis terputus-putus menunjukkan sublist.
i bergerak dari sudut kiri ke kanan sampai mendapatkan nilai yang >= pivot.
j bergerak dari sudut kanan ke kiri sampai menemukan nilai yang < pivot.
Langkah 1 :
i berhenti pada index ke-1 karena langsung mendapatkan nilai yang > dari pivot (15).
j Berhenti pada index ke-6 karena juga langsung mendapatkan nilai yang < dari pivot.
Karena i < j maka data yang ditunjuk oleh I ditukar dengan data yang ditunjuk oleh j
sehingga menjadi :
2 10 15 3 8 22
Langkah 2 :
i. berhenti pada index ke-3 (pivot) karena tidak menemukan bilangan yang > dari
pivot.
i. berhenti pada index k-5 menunjuk pada nilai yang < dari pivot.
Karena i < j maka data yang ditunjuk oleh i (pivot) ditukar dengan data yang ditunjuk
oleh j sehingga menjadi :
2 10 8 3 15 22
Langkah 3 :
Proses yang sama seperti sebelumnya dilakukan terhadap 2 buah sublist yang baru
(ditandai dengan persegi panjang dengan garis terputus-putus).
Procedure Quick Sort dengan nilai tengah sebagai pembanding (pivot).
x[i]:=sementara;
{urutkan rekursi}
quicksort(x, bawah, i-1);
bawah:=i+1;
end;
end;
var
data: larikurut;
n,i:word;
begin
clrscr;
write('Jumlah data yang akan diurutkan?');readln(n);
writeln;
writeln('Masukkan data:');
for i:=1 to n do begin
write('Data ke',i,'?');readln(data[i]);
end;
{urutkan dengan prosedure quicksort}
quicksort(data,1,n);
{tampilkan data yang telah urut}
writeln;
writeln('Data yang telah urut:');
writeln('---------------------');
for i:=1 to n do
writeln(data[i]);
readln;
end.