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) ---> selesai
Di bawah ini merupakan prosedur yang menggunakan metode buble secara
ascending :
#include <iostream.h>
int total,data[10];
void input()
{
cout<<”input a value= “;
cin>>total;
for(int a=0; a<total; a++){
cout<<”masukan nilai pada index ke”<<a+1<<”=”;
cin>>data[a];
}
}
void sort(){
int temp;
for(int a=0;a<total-1;a++){
for(int b=0;b<total-1;b++){
if(data[b]>data[b+1]){
temp=data[b+1];
data[b+1]=data[b];
data[b]=temp;
}
}
}
}
void view(){
for(int a=0;a<total;a++){
cout<<data[a];
}
cout<<”\n”;
}
int main(){
input();
cout<<”sebelum di- sorting\n”;
view();
sort();
cout<<”sesudah di- sorting\n”;
view();
}
#include <iostream.h>
int total,data[10];
void input()
{
cout<<”input a value= “;
cin>>total;
for(int a=0; a<total; a++){
cout<<”masukan nilai pada index ke”<<a+1<<”=”;
cin>>data[a];
}
}
void sort(){
int temp;
for(int a=0;a<total-1;a++){
for(int b=0;b<total-1;b++){
if(data[b]>data[b+1]){
temp=data[b+1];
data[b+1]=data[b];
data[b]=temp;
}
}
}
}
void view(){
for(int a=0;a<total;a++){
cout<<data[a];
}
cout<<”\n”;
}
int main(){
input();
cout<<”sebelum di- sorting\n”;
view();
sort();
cout<<”sesudah di- sorting\n”;
view();
}
Tidak ada komentar:
Posting Komentar