Jika kita memiliki 5 buah bilangan acak, bagaimana cara kita
mengubahnya menjadi bilangan yang berurutan? Mudah sekali. Kita bisa membuat
programnya dengan beberapa cara. Diantaranya, bubble sort, selection sort,
shell sort dan quick sort.
1. Bubble Sort
Mengapa
proses ini dinamakan ‘bubble’? Karena proses pengurutan yang dilakukan adalah
secara berangsur-angsur berpindah ke posisi yang tepat , seperti gelembung.
Cara pengurutan dengan Bubble Sort dilakukan dengan membandingkan bilangan
sekarang dengan bilangan berikutnya. Apabila bilangan sekarang lebih
besar dari bilangan berikutnya maka elemen tersebut ditukar (untuk pengurutan
ascending). Sedangkan jika elemen sekarang lebih kecil daripada elemen
berikutnya, maka kedua elemen tersebut ditukar (untuk pengurutan
descending).
Contoh:
Proses 1 :
22 10 15 3 8 2
22 10 15 3 2 8
22 10 15 2 3 8
22 10 2 15 3 8
22 10 2 15 3 8
22 2 10 15 3 8
2 22 10 15 3 8
2 22 10 15 3 8
Pengecekan dimulai dari data yang paling
akhir, kemudian dibandingkan dengan data di depannya,jika data didepannya lebih
besar maka akan di tukar.
Proses 2:
2 22 10 15 3 8
2 22 10 15 3 8
2 22 10 3 15 8
2 22 3 10 15 8
2 3 22 10 15 8
pengecekan dilakukan sampai dengan data ke-2 karena data pertama pasti sudah paling kecil.
Proses 3 :
2 3 22 10 15 8
2 3 22 10 8 15
2 3 22 8 10 15
2 3 8 22 10 15
Proses 4 :
2 3 8 22 10 15
2 3 8 22 15 10
2 3 8 15 22 10
Proses 5 :
2 3 8 15 22 10
2 3 8 15 10 22
Pengurutan berhenti.
2 22 10 15 3 8
2 22 10 15 3 8
2 22 10 3 15 8
2 22 3 10 15 8
2 3 22 10 15 8
pengecekan dilakukan sampai dengan data ke-2 karena data pertama pasti sudah paling kecil.
Proses 3 :
2 3 22 10 15 8
2 3 22 10 8 15
2 3 22 8 10 15
2 3 8 22 10 15
Proses 4 :
2 3 8 22 10 15
2 3 8 22 15 10
2 3 8 15 22 10
Proses 5 :
2 3 8 15 22 10
2 3 8 15 10 22
Pengurutan berhenti.
Jika dituangkan dalam program dan diagram flowchart menjadi:
Procedure Bubble(Var Temp : Data; N : Integer);
Var I,j : Integer;
Begin
For i:=2 To N Do
For J:=N DownTo i Do
If Temp[j] < Temp[j-1] Then
SWAP(Temp[j], Temp[j-1]);
End;
Begin
For i:=2 To N Do
For J:=N DownTo i Do
If Temp[j] < Temp[j-1] Then
SWAP(Temp[j], Temp[j-1]);
End;
2. Selection Sort
Pengurutan dengan cara Selection Sort
berdasarkan atas pencarian nilai terkecil dari seluruh bilangan, lalu di tukar
dengan bilangan pertama. Pada langkah kedua, data terkecil dicari mulai dari
data kedua, lalu ditukar dengan bilangan kedua, begitu seterusnya sampai semua
data terurut.
Dalam flowchart:
Var i,j,sem: integer;
Begin
For I:=1 To
N-1 Do
Begin
sem:=i;
For j:=i+1 To N Do
If Bilangan[sem] > Bilangan[j] Then sem:=j;
SWAP(bilangan[i], bilangan[sem]);
End;
End;
3. Shell Sort
Pada metode ini,
digunakan jarak tertentu antara dua elemen yang dibandingkan dan
ditukarkan. Secara singkat metode ini dijelaskan sebagai berikut. Pada langkah
pertama, kita ambil elemen pertama dan kita bandingkan dan kita bandingkan
dengan elemen pada jarak tertentu (biasanya setengah dari jumlah data) dari elemen
pertama tersebut. Kemudian elemen kedua kita bandingkan dengan elemen lain
dengan jarak yang sama seperti jarak yang sama seperti diatas. Demikian
seterusnya sampai seluruh elemen dibandingkan. Pada langkah kedua proses
diulang dengan langkah yang lebih kecil, pada langkah ketiga jarak tersebut
diperkecil lagi seluruh proses dihentikan jika jarak sudah kurang dari satu.
Untuk lebih jelasnya, perhatikan proses
shell sort dalam procedure pascal berikut :
Procedure Shell(Var Temp : Data; JmlData :
Integer);
Var I,J, Jarak : Integer;
Begin
Jarak := JmlData Div 2;
While Jarak > 0 Do
Begin
For I:=1 To JmlData-Jarak Do
Begin
J
:= I + Jarak;
If
Temp[I] > Temp[J] Then
SWAP(Temp[I], Temp[Lok]);
End;
Jarak := Jarak
Div 2;
End;
End;
4. Quick Sort
Secara garis
besar metode ini dijelaskan sebagai berikut. Misalnya kita ingin mengurutkan
data A yang membunyai N elemen. Kita pilih sembarang elemen dari data tersebut,
biasanya elemen pertama, misalnya X. Kemudian semua elemen tersebut disusun
dengan menempatkan X pada posisi J sedemikian rupa sehingga elemen ke 1 sampai
ke J-1 mempuyai nilai lebih kecil dari X. Sampai berikutnya diulang untuk
setiap sub data.
Dalam Procedure Pascal :
Procedure Quick(Var Temp : Data; Awal,
Akhir : Integer);
Var I,J :
Integer;
Procedure
ATUR;
Begin
I:=Awal +1;
J:= Akhir;
While Temp[I] < Temp[Awal] Do Inc(I);
While Temp[J] > Temp[Awal] Do Dec(J);
While I < J Do
Begin
SWAP(Temp[I], Temp[J]);
While
Temp[I] < Temp[Awal] Do Inc(I);
While
Temp[J] > Temp[Awal] Do Dec(J);
End;
SWAP(Temp[Awal], Temp[J]);
End;
Begin
If Awal < Akhir Then
Begin
ATUR;
Quick(Temp,
Awal, J-1);
Quick(Temp,J+1,Akhir);
End;
End;
Selamat Mencoba^^