Pada materi matakuliah struktur data ini, akan dibahasa salah satu metode pengurutan yang paling sederhana yaitu Buble sort (metode gelembung). Pada sesi ini akan dijelaskan tentang:
- Pengertian/konsep buble sort
- Kelebihan metode bubble sort
- Kelemahan metode bubble sort
- Algoritma buble sort
- Analisis Algoritma buble sort
- Implementai bubble sort dalam bahasa C atau C++
Pengertian/Konsep Buble Sort
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.
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.
Kelebihan Bubble Sort
- Metode Buble Sort merupakan metode yang paling simpel
- Metode Buble Sort mudah dipahami algoritmanya
Kelemahan Bubble Sort
Meskipun simpel metode Bubble sort merupakan metode pengurutanyang 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.
Algoritma Bubble Sort
- 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).
- 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.
- 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.
- 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
Analisis Algoritma Bubble Sort
Tujuan dari analisis algoritma adalah untuk mengetahui efisiensi dari algoritma. Dalam hal ini dilakukan pembandingan antara dua atau lebih algoritma pengurutan.Tahap analisis adalah melakukan pengecekan program untuk memastikan bahwa program telah benar secara logika maupun sintak (tahap tracing atau debugging). Tahap selanjutnya yaitu menjalankan program untuk mengetahui running time atau waktu komputasi dalam hal ini
termasuk jumlah langkah. Data uji yang digunakan adalah data yang tidak terurut atau data random, terurut membesar/, dan terurut mengecil.
Salah satu cara untuk menganalisa kecepatan algoritma sorting saat running time adalah dengan menggunakan notasi Big O. Algoritma sorting mempunyai kompleksitas waktu terbaik, terburuk, dan rata-rata. Dengan notasi Big O, kita dapat mengoptimalkan penggunaan algoritma sorting. Sebagai contoh, untuk kasus dimana jumlah masukan untuk suatu pengurutan banyak, lebih baik digunakan algoritma sorting seperti quick sort, merge sort, atau heap sortkarena kompleksitas waktu untuk kasuk terburuk adalah O(n log n). Hal ini tentu akan sangatberbeda jika kita menggunakan algoritma sorting insertion sort atau bubble sort dimana waktu yang dibutuhkan untuk melakukan pencarian akan sangat lama. Hal ini disebabkan kompleksitas waktu terburuk untuk algoritma sorting tersebut dengan jumlah masukan yang banyak adalah O(n2).
Dari grafik dibawah dapat diketahui buble sort adalah metode yang paling lambat dari yang lambat-lambat..heheheh..
Implementasi Bubble Sort dalam Bahasa C/C++
Berikut ini listing program atau kode program metode bubble sort dalam bahasa C/C++
#include<stdio.h> void bubbleSort(int data[], int n){ int i, j=0, temp, flag = 1; while(flag){ flag = 0; for(i=0; i<n; i++){ if(data[i]>data[i+1]){ temp = data[i]; data[i] = data[i+1]; data[i+1] = temp; flag++; } } } } main(){ int data[1000]; int n, i; printf("________.:: BUBBLE SORT :.________\n"); printf("Enter numbers of data(maks 1000): "); scanf("%d", &n); printf("Data (separate by space): "); for(i=0; i<n; i++) scanf("%d", &data[i]); bubbleSort(data, n); printf("\nOutput after sort:\n"); for(i=0; i<n; i++) printf("%d ", data[i]); getch(); return 0;}
good..
Thanx a lot
TERIMAKASIH ATAS BAGI-BAGI ILMU NYA
Trimakasih juga sudah mau berkunjung
saya mw tanya…. algoritma bubble sort ini bisa u/ bilangan bulat negatif tidak ya? trus alasannya apa?
trims
bisa…algoritma bubble sort bisa digunakan untuk tipe data apapun asalakhan data-datanya bisa diperbandingkan, termasuk string
sy msh bingung cara mbuat pseudocode dr metode buble sort, mhn djelaskan, tx
mas tolong kasih contoh buble sort yang ascending dan descending donk..
tolong banget ya mas..
di tunggu..
contoh yang diatas sudah ascending kalo menjadikannya descending cukup mengubah tanda lebih kecil menjadi tanda lebih besar.
Yaitu dari: if(data[i]>data[i+1])
menjadi : if(data[i]<data[i+1])
hanya begitu caranya. mudahkan
siiiip
siip i like thats
cuman mo ty neeh. tu contoh di atas tampilannya gemana yah?
bang gmna cara membandingkan bubble sort dngn shell sort data acak min 1000 menggunakan Bahasa C++..tHNK
bang tolong beritahu saya bagaimana membandingkan bubble dngn shell Sort menggunakan C++ data acak Min 1000… mksh
Pasang counter diperualngannya..jika inigin mengetahui jumlah perulangan masing-masing metoda pengurutan. Tentusaja dengan data yang sama
Tetapi jika ingin mengetahui waktunya (detik) gunakan timer diawal dan diakhir perulangan. Sehingga bisa saling diperbandingkan. Semoga bisa menjawab.
header nya kurang tu.
#include
header ny kurang
#include
nulis #include koq ngga bs ya?
makasih
gmana sich program c++ yg runningnya 1,2,3,4,5,…..,30?
makasih jawabannya
mas setelah dicompile qo trdapat syntax yg eror??
karena kurang #include.. coba deh….
makasih ya
sangat membantu
Pak Fairuz Makasih ilmunya.. bener2 membantu
Makasih juga
Pak Fairuz, Trmksh sudah dibantu
sama-sama ya
Pak Fairuz, makasih sdh dibantu dgn catatannya. 😀
Ok 🙂
Ping balik: STRUKTUR DATA « Armasyarifudin's Blog
Pak, boleh nanya?
di situ kan dideklarasi int data[1000]
nah pertanyaan saya, kalo di komputer saya maxsize nya itu hanya bisa sampai 295. jadi misal saya assign int data[1000] lalu di printf(bahasa C), nanti yg tampak cuma data ke 715 sampai data ke 1000 (intinya hanya 295 data yg ‘tersimpan’ dalam array).
ini ceritanya saya dikasih tugas menghitung/membandingkan waktu dari macam” sort. artinya kan butuh banyak data. sementara array nya kalau dimensi 1 hanya dapat max 295 slot data.
ada solusi??? (atau, kok di kodingan Bapak bisa ampe 1000 size array nya??)
thx
Saya belum pernah mencobanya untuk data besar…mungkin terjadi demikian karena keterbatasan jumlah elemen array pada compiler mas Ruby..Solusi lain yang mungkin bisa dicoba, dengan menggunakan array dinamis.
Misalnya nih:
int* data = NULL; // Pointer untuk tipe int, inisialisasi dengan null
int n; // untuk ukuran array
cin >> n; // baca ukuran
data = new int[n]; // alokasikan array
for (int i=0; i<n; i++) {
a[i] = 0; // inisialisasi semua elemen dengan 0
}
mas itu kan buat C++ . nah klo di C gmna yah ? saya buat nya di C soal nya
kakkkkkkkk
apa kunci utama belajar bubble sort?????????
Makasih Pak!!!
Sama2
mas sebelumnya terima kasih untuk info descending nya…..
dan sekalian mau bertanya mengenai perihal diatas.
dalam sebuah lomba terdapat beberapa peserta, nah yang menjadi patokan peringkat pastinya skor……. dari skor kan dilakukan descending. setelah ter-urut perlu dicetak (print) dalam bentuk peringkat misal
juara 1 adalah peserta ke-23
juara 2 adalah peserta ke-10
juara 3 adalah peserta ke-45
nah disini bagaimana meng-konvert dari descending nilai ke bentuk print nama peserta. sekian terima kasih …..
keren ……..bwt bahan referensi saya terima kasih
bang tolong semua metode sorting di jelaskan please
Insya Allah ya…mudah2an ada waktu
thx berbgi ilmunya
terimakasih BanyaK atas artikel tentang Algoritma Struktur Datanya
bener luar biasa……GOOD luck BANG
pak, mohon bantuin buat output pass metode bubleshort untuk data acak sebanyak 18 data dong..
data silakan bapak tentukan sendiri, yang penting minimal 18, maksimal 25 data.
bingung nrumusnya, buat tugas ujian besuk selasa.
untuk coding dan flowchart aku udah selesai tapi implementasi pass aku ga bisa… mumet.
makasih
baik, tapi lebih di jelaskan rinci maksudnya.. terutama kelebihannya… hanya penjelsan singkat tanpa alasan…
Assalamu’alaikum,
wahhh mas terima kasih infonya, 🙂 mohon do’anya yah semoga UAS saya lancar, (^_^) amin amin amin ya Allah
makasih agan ,,,salam uye ,, 😀
int arrange[5]; maksutnya apa ya
bagaimana cara mudah dalam mempelajar bubble sort??
Ijin ngutip gan. lumayan buat referensi
Akhirnya ketemu juga, terimakasih untuk penjelasannya yang sangat dimengerti