BUBBLE
SORT
A. Pengertian
Bubble Sort
Bubble
Sort adalah salah satu algoritma untuk sorting data, atau kata lainnya
mengurutkan data dari yang terbesar ke yang terkecil atau sebaliknya (Ascending
atau Descending).
Bubble sort (metode
gelembung) adalah metode/algoritma pengurutan dengan dengan cara melakukan
penukaran data dengan tepat disebelahnya secara terus menerus sampai bisa
dipastikan dalam satu iterasi tertentu tidak ada lagi perubahan. Jika tidak ada
perubahan berarti data sudah terurut. Disebut pengurutan gelembung karena
masing-masing kunci akan dengan lambat menggelembung ke posisinya yang tepat.
Metode pengurutan
gelembung (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. Prinsip di
atas dipakai pada pengurutan gelembung.
Algoritma
bubble sort adalah salah satu algoritma pengurutan yang paling simple, baik
dalam hal pengertian maupun penerapannya. Ide dari algoritma ini adalah
mengulang proses pembandingan antara tiap-tiap elemen
array dan menukarnya
apabila urutannya salah. Pembandingan elemen-elemen ini akan terus diulang
hingga tidak perlu dilakukan penukaran lagi. Algoritma
ini termasuk dalam
golongan algoritma comparison sort, karena menggunakan perbandingan dalam
operasi antar elemennya. Berikut ini adalah gambaran dari algoritma bubble sort.
Misalkan kita mempunyai sebuah array dengan. Elemen-elemen “4 2 5 3
9”. Proses yang akan terjadi apabila digunakan algoritma bubblesort adalah
sebagai berikut.
Pass
pertama
(4
2 5 3 9) menjadi (2 4 5 3 9)
(2
4 5 3 9) menjadi (2 4 5 3 9)
(2
4 5 3 9) menjadi (2 4 3 5 9)
(2
4 3 5 9) menjadi (2 4 3 5 9)
Pass
kedua
(2
4 3 5 9) menjadi (2 4 3 5 9)
(2
4 3 5 9) menjadi (2 3 4 5 9)
(2
3 4 5 9) menjadi (2 3 4 5 9)
(2
3 4 5 9) menjadi (2 3 4 5 9)
Pass
ketiga
(2
3 4 5 9) menjadi (2 3 4 5 9)
(2
3 4 5 9) menjadi (2 3 4 5 9)
(2
3 4 5 9) menjadi (2 3 4 5 9)
(2
3 4 5 9) menjadi (2 3 4 5 9)
Dapat
dilihat pada proses di atas, sebenarnya pada pass kedua, langkah kedua, array
telah terurut. Namun algoritma tetap dilanjutkan hingga pass kedua berakhir.
Pass ketiga dilakukan karena definisi terurut dalam algoritma bubblesort adalah
tidak ada satupun penukaran pada suatu pass, sehingga pass ketiga dibutuhkan
untuk memverifikasi keurutan array tersebut.
B. Algoritma
Bubble Sort
1. Membandingkan
data ke-i dengan data ke-(i+1) (tepat bersebelahan). Jika tidak sesuai maka
tukar (data ke-i = data ke-(i+1) dan data ke-(i+1) = data ke-i). Apa maksudnya
tidak sesuai? Jika kita menginginkan algoritme menghasilkan data dengan urutan
ascending (A-Z) kondisi tidak sesuai adalah data ke-i > data ke-i+1, dan
sebaliknya untuk urutan descending (A-Z).
2. Membandingkan
data ke-(i+1) dengan data ke-(i+2). Kita melakukan pembandingan ini sampai data
terakhir. Contoh: 1 dgn 2; 2 dgn 3; 3 dgn 4; 4 dgn 5 … ; n-1 dgn n.
3. Selesai
satu iterasi, adalah jika kita sudah selesai membandingkan antara (n-1) dgn n.
Setelah selesai satu iterasi kita lanjutkan lagi iterasi berikutnya sesuai
dengan aturan ke-1. mulai dari data ke-1 dgn data ke-2, dst.
4. Proses
akan berhenti jika tidak ada pertukaran dalam satu iterasi.
Contoh Kasus Bubble Sort :
Misalkan kita punya data seperti ini: 6, 4, 3, 2 dan kita ingin
mengurutkan data ini (ascending) dengan menggunakan bubble sort. Berikut ini
adalah proses yang terjadi:
Iterasi ke-1: 4, 6, 3,
2 :: 4, 3, 6, 2 :: 4, 3, 2, 6 (ada 3 pertukaran)
Iterasi ke-2: 3, 4, 2,
6 :: 3, 2, 4, 6 :: 3, 2, 4, 6 (ada 2 pertukaran)
Iterasi ke-3: 2, 3, 4,
6 :: 2, 3, 4, 6 :: 2, 3, 4, 6 (ada 1 pertukaran)
Iterasi ke-4: 2, 3, 4,
6 :: 2, 3, 4, 6 :: 2, 3, 4, 6 (ada 0 pertukaran) -> proses selesai
C. Kompleksitas
Algoritma Bubble Sort
Kompleksitas Algoritma
Bubble Sort dapat dilihat dari beberapa jenis kasus, yaitu worst-case,
average-case, dan best-case.
Ø Kondisi
Best-Case
Dalam kasus ini, data
yang akan disorting telah terurut sebelumnya, sehingga proses perbandingan
hanya dilakukan sebanyak (n-1) kali, dengan satu kali pass.
Proses perbandingan dilakukan hanya
untuk memverifikasi keurutan data. Contoh Best-Case dapatdilihat pada
pengurutan data “1 2 3 4” di bawah ini.
Pass Pertama
(1 2 3 4) menjadi (1 2 3 4)
(1 2 3 4) menjadi (1 2 3 4)
(1 2 3 4) menjadi (1 2 3 4)
Dari proses di atas, dapat dilihat bahwa tidak
terjadi penukaran posisi satu kalipun, sehingga tidak dilakukan pass
selanjutnya. Perbandingan elemen dilakukan sebanyak tiga kali. Proses
perbandingan pada kondisi ini hanya dilakukan sebanyak (n-1) kali.
Persamaan Big-O yang diperoleh dari proses ini adalah O(n). Dengan kata
lain, pada kondisi Best-Case algoritma Bubble Sort termasuk pada algoritma
lanjar.
Ø Kondisi
Worst-Case
Dalam kasus ini, data
terkecil berada pada ujung array. Contoh Worst-Case dapat dilihat pada
pengurutan data “4 3 2 1” di bawah ini.
Pass Pertama
(4 3 2 1) menjadi (3 4
2 1)
(3 4 2 1) menjadi (3 2
4 1)
(3 2 4 1) menjadi (3 2
1 4)
Pass Kedua
(3 2 1 4) menjadi (2 3
1 4)
(2 3 1 4) menjadi (2 1
3 4)
(2 1 3 4) menjadi (2 1
3 4)
Pass Ketiga
(2 1 3 4) menjadi (1 2
3 4)
(1 2 3 4) menjadi (1 2
3 4)
(1 2 3 4) menjadi (1 2
3 4)
Pass Keempat
(1 2 3 4) menjadi (1 2
3 4)
(1 2 3 4) menjadi (1 2
3 4)
(1 2 3 4) menjadi (1 2
3 4)
Dari langkah pengurutan di atas, terlihat
bahwa setiap kali melakukan satu pass, data terkecil akan bergeser
ke arah awal sebanyak satu step. Dengan kata lain, untuk menggeser
data terkecil dari urutan keempat menuju urutan pertama, dibutuhkan pass
sebanyak tiga kali, ditambah satu kali pass untuk memverifikasi.
Sehingga jumlah proses pada kondisi best case dapat
dirumuskan sebagai berikut. Jumlah proses = n2+n (3)
Dalam persamaan (3) di atas, n adalah jumlah
elemen yang akan diurutkan. Sehingga notasi Big-O yang didapat adalah
O(n2). Dengan kata lain, pada kondisi worst-case, algoritma Bubble Sort
termasuk dalam kategori algoritma kuadratik.
Ø Kondisi
Average-Case
Pada kondisi
average-case, jumlah pass ditentukan dari elemen mana yang mengalami
penggeseran ke kiri paling banyak. Hal ini dapat ditunjukkan oleh proses
pengurutan suatu array, misalkan saja (1 8 6 2). Dari (1 8 6 2),
dapat dilihat bahwa yang akan mengalami proses penggeseranpaling
banyak adalah elemen 2, yaitu sebanyak dua kali.
Pass Pertama
(1 8 6 2) menjadi (1 8
6 2)
(1 8 6 2) menjadi (1 6
8 2)
(1 6 8 2) menjadi (1 6
2 8)
Pass Kedua
(1 6 2 8) menjadi (1 6
2 8)
(1 6 2 8) menjadi (1 2
6 8)
(1 2 6 8) menjadi (1 2
6 8)
Pass Ketiga
(1 2 6 8) menjadi (1 2
6 8)
(1 2 6 8) menjadi (1 2
6 8)
(1 2 6 8) menjadi (1 2
6 8)
Dari proses pengurutan di atas, dapat dilihat
bahwa untuk mengurutkan diperlukan dua buah passing,ditambah satu buah
passing untuk memverifikasi. Dengan kata lain, jumlah proses perbandingan
dapat dihitung sebagai berikut. Jumlah proses = x2+x (4) Dalam
persamaan (4) di atas, x adalah jumlahpenggeseran terbanyak. Dalam hal ini, x
tidak pernah lebih besar dari n, sehingga x dapat dirumuskan sebagai
Dari persamaan (4) dan (5) di atas, dapat
disimpulkan bahwa notasi
big-O nya adalah O(n2). Dengan kata
lain, pada kondisi average case algoritma Bubble Sort termasuk dalam
algoritma kuadratik.
D. Implementasi
dalam Pseudo-Code
Setiap
algoritma akan memiliki implementasi yang berbeda, tergantung dari bahasa
program yang dipakai. Oleh karena itu berikut ini adalah pseudo-code dari
algoritma bubblesort, untuk memudahkan implementasi bubblesort pada bahasa
apapun.
procedure bubbleSort(
A : list of
sortable
items ) defined as:
do
swapped
:= false
for
each i in 0 to length(A)
- 2
inclusive
do:
if A[i]
> A[i+1] then
swap(
A[i], A[i+1] )
swapped
:= true
end
if
end
for
while swapped
end
procedure
E. Kelebihan
dan Kelemahan Bubble Sort
Kelebihan :
· Metode
Buble Sort merupakan metode yang paling simpel
· Metode Buble Sort
mudah dipahami algoritmanya
Kelemahan:
Meskipun simpel metode
Bubble sort merupakan metode pengurutan yang paling tidak
efisien. Kelemahan buble sort adalah pada saat
mengurutkan data yang sangat besar akan mengalami kelambatan luar biasa, atau
dengan kata lain kinerja memburuk cukup signifikan ketika data yang diolah
jika data cukup banyak. Kelemahan lain adalah jumlah pengulangan akan
tetap sama jumlahnya walaupun data sesungguhnya sudah cukup terurut. Hal ini
disebabkan setiap data dibandingkan dengan setiap data yang lain untuk
menentukan posisinya.
SELECTION SORT
Adalah
metode sorting dimana elemen- elemen di perbandingkan satu-persatu sampai pada elemen
terakhir dan disusun berdasarkan ketentuan ketentuan berlaku (terbesar atau
terkecil). Selection Sort membandingkan elemen yang sekarang dengan elemen yang
terakhir. Jika ditemukan elemen lain yang lebih kecil dari elemen sekarang maka
dicatat possinya dan ditukar.
Konsep dari selection sort ini adalah
sebagai berikut :
Langsung saja kita akan mencoba
menerapkan selection sort pada c++.
keterangan:
- baris 5 -7 = adalah pendeklarasian variabel dan array yang akan digunakan
dalam program
- baris 10-13 = Proses inputan yang disimpan dalam array yang dilakukan
dalam perulangan
- baris 14-17 = Proses pengurutan antara elemen satu dengan yang lain dan
apabila elemen satu lebih kecil daripada elemen berikutnya
(mengurtkan besar ke kecil) maka proses pertukaran akan
terjadi pada pada baris 24- 26.
- baris 29-32 = Setelah pengurutan berhasil maka nilai akan dicetak/
ditampilkan pada baris ini.
- baris 5 -7 = adalah pendeklarasian variabel dan array yang akan digunakan
dalam program
- baris 10-13 = Proses inputan yang disimpan dalam array yang dilakukan
dalam perulangan
- baris 14-17 = Proses pengurutan antara elemen satu dengan yang lain dan
apabila elemen satu lebih kecil daripada elemen berikutnya
(mengurtkan besar ke kecil) maka proses pertukaran akan
terjadi pada pada baris 24- 26.
- baris 29-32 = Setelah pengurutan berhasil maka nilai akan dicetak/
ditampilkan pada baris ini.
Maka jika di jalankan akan menjadi
berikut sourcecode:
#include<iostream>
using namespace std;
int main()
{ int a,k,c,d,g;
k=4;
int b[4];
cout<<"mengurutkan nilai dari besar ke
kecil"<<endl<<endl;
for(a=0;a<k;a++)
{
cout<<"Masukkan nilai "<<a+1<<" :
";cin>>b[a];
}
for(a=0;a<k-1;a++)
{
c=a;
for(d=a+1;d<k;d++)
{
if(b[c]<b[d])
{
c=d;
}
}
g=b[c];
b[c]=b[a];
b[a]=g;
}
cout<<"\n
setelah diurutkan akan menjadi : \n";
for(a=0;a<k;a++)
{
cout<<b[a]<<" \n";
}
}
INSERT SORT
1.
Algoritma
-
Mulai
-
Ambil satu data ke-I simpan di temp
-
Bandingkan data temp dengan data yang
ada di sebelah kiri satu persatu
-
Cek apakah data temp lebih kecil dari
data sebelah kiri
-
Jika langkah nomor 3 bernilai true,
lakukan pergeseran data satu persatu kemudian pada posisi yang tepat sisipkan
data temp
-
Ulangi langkah 1 sampai 4 hingga I sama
dengan n
-
Selessai
2.
Pseudocode
-
For j ß2 to length [A]
-
Do key ßA[j]
-
Insert A[j] ke sekuens yang sudah di
sorting A[1…j-1]
-
I ßj-1
-
While I > 0 and A[i] > key
-
Do A[i+1] ßA[i]
-
I ßi-1
-
A[i+1] ß key
3.
Contoh program
#include
<iostream.h>
#include<conio.h>
Void
main()
{
Int
x,a[14],I,t,j,k;
Cout<<”masukkan
jumlah siswa= ”; cin>>x;
For(i=1;
i<=x; i++)
{
Cout<<”\n nilai siswa
ke-”<<i<<”:”;cin>>a[i];
}
cout<<”\n
data sebelum di urutkan: ”;
for(i=1; i<=x; i++)
{
Cout<<” ”<<a[i];
}
Cout<<endl;
For
(i=1; i<= x; i++)
{
For (j=1; j<=I ; j++)
{
If (a[i]
> a[j])
{
T=a[i];
A[i] = a[j];
A[j] = t
}
}
Cout<<”\n”<<i<<”:”;
For
(k=1 ; k <= I ; k++)
{
Cout<<””<<a[k];
}
}
Cout<<”\n
3 nilai tertinggi dari data nilai siswa:”;
For(i=1;i<=3;i++)
{
Cout<<””<<a[i];
}
Getch();
}