Pada tulisan ini akan saya berikan contoh program sederhana untuk mendemonstrasikan algoritma pengurutan data gelembung atau bubble-sort.
Disebut sebagai bubble atau gelembung karena algoritma ini memang mirip tingkah gelembung udara dalam air. Gelembung naik perlahan-lahan ke permukaan air.
Algoritma ini merupakan algoritma paling dasar dan paling lambat karena tekniknya adalah dengan membandingkan satu angka dengan angka-angka yang lain dalam deret, dan jika angka yang dibandingkan lebih besar daripada angka pembanding, maka nilainya dipertukarkan (swap).
Anda tidak akan mendapatkan penjelasan yang lengkap dan terperinci mengenai cara kerja algoritma bubble-sort pada tulisan ini. Detil mengenai teknik atau algoritma pengurutan data bubble-sort dapat Anda pelajari di Wikipedia. Sekedar informasi, penjelasan dan ilustrasi pada halaman Wikipedia tersebut sangatlah mengesankan.
Nah, berikut adalah listing program bubblesort.c yang saya ketik menggunakan editor ChSciTE dengan interpreter Ch.
// Contoh Program Sorting Bubble-Sort – Chandra MDE, http://teknikelektrolinks.comPertama-tama, program membuat data bilangan acak menggunakan fungsi srand() dan fungsi rand() sebagai berikut:
#include <stdio.h>
#define jumlah_data 20
int data_angka[100];
int i, j, t;
int main(void)
{
srand(time(NULL));
for (i=0; i<jumlah_data; i++)
data_angka[i] = rand()%200;
//tampilkan data_angka sebelum disortir
printf("Data sebelum disortir…\n");
printf("—————————————————–");
for (i=0; i<jumlah_data; i++)
{
if (i % 10==0) printf("\n");
printf("%5d", data_angka[i]);
}
for (i=0; i<jumlah_data-1; i++)
{
for (j=i+1; j<jumlah_data; j++)
{
if (data_angka[i]>data_angka[j])
{
t = data_angka[i];
data_angka[i] = data_angka[j];
data_angka[j] = t;
}
}
printf("\n");
for (t=0; t<jumlah_data; t++)
{
if (t % 10==0) printf("\n");
printf("%5d", data_angka[t]);
}
printf("\n–^Hasil sorting perulangan ke-%2d ——————-", i+1);
}
//tampilkan data_angka sebelum disortir
printf("\n\nData setelah disortir…\n");
printf("—————————————————–");
for (i=0; i<jumlah_data; i++)
{
if (i % 10==0) printf("\n");
printf("%5d", data_angka[i]);
}
printf("\n—————————————————–\n");
}
// Bangkitkan bilangan acak sebanyak jumlah_dataFungsi srand(time(NULL)) berfungsi untuk membangkitkan bibit bilangan acak (randomseed). Hal ini perlu dilakukan agar kita mendapatkan data acak yang berbeda setiap kali program dijalankan. Tanpa pemanggilan fungsi tersebut, maka fungsi rand() akan membangkitkan data bilangan acak yang sama karena bibitnya tidak dirubah.
srand(time(NULL));
for (i=0; i<jumlah_data; i++)
DATA_ANGKA[i] = rand()%200;
Inti dari algoritma ini adalah pertukaran nilai antara dua indeks pada array deret bilangan yakni DATA_ANGKA[]. Pada contoh program di atas akan dihasilkan deret bilangan yang terurut dari kecil ke besar (ascending).
if (DATA_ANGKA[i]>DATA_ANGKA[j])Untuk mendapatkan hasil deret bilangan yang terurut dari besar ke kecil (descending), gantilah operator > dengan operator <, atau tukarkan indeks i dan j.
{
t = DATA_ANGKA[i];
DATA_ANGKA[i] = DATA_ANGKA[j];
DATA_ANGKA[j] = t;
}
Selain menampilkan data bilangan sebelum dan sesudah diurutkan, program juga menampilkan array DATA_ANGKA pada tiap perulangan proses pengurutan. Berikut adalah hasil eksekusi program bubblesort.c di atas.
>ch -u ./bubblesort.cSetelah perulangan pertama, data terkecil akan menempati indeks 0 (DATA_ANGKA[0]). Dan setelah perulangan kedua, data terkecil berikutnya akan menempati indeks 1 (DATA_ANGKA[1]), dan seterusnya.
DATA_ANGKA sebelum diurutkan…
—————————————————–
110 58 70 61 60 172 175 169 54 130
160 182 127 20 139 109 124 73 80 123
20 110 70 61 60 172 175 169 58 130
160 182 127 54 139 109 124 73 80 123
–^Hasil sorting perulangan ke- 1 ——————-
20 54 110 70 61 172 175 169 60 130
160 182 127 58 139 109 124 73 80 123
–^Hasil sorting perulangan ke- 2 ——————-
20 54 58 110 70 172 175 169 61 130
160 182 127 60 139 109 124 73 80 123
–^Hasil sorting perulangan ke- 3 ——————-
20 54 58 60 110 172 175 169 70 130
160 182 127 61 139 109 124 73 80 123
–^Hasil sorting perulangan ke- 4 ——————-
20 54 58 60 61 172 175 169 110 130
160 182 127 70 139 109 124 73 80 123
–^Hasil sorting perulangan ke- 5 ——————-
20 54 58 60 61 70 175 172 169 130
160 182 127 110 139 109 124 73 80 123
–^Hasil sorting perulangan ke- 6 ——————-
20 54 58 60 61 70 73 175 172 169
160 182 130 127 139 110 124 109 80 123
–^Hasil sorting perulangan ke- 7 ——————-
20 54 58 60 61 70 73 80 175 172
169 182 160 130 139 127 124 110 109 123
–^Hasil sorting perulangan ke- 8 ——————-
20 54 58 60 61 70 73 80 109 175
172 182 169 160 139 130 127 124 110 123
–^Hasil sorting perulangan ke- 9 ——————-
20 54 58 60 61 70 73 80 109 110
175 182 172 169 160 139 130 127 124 123
–^Hasil sorting perulangan ke-10 ——————-
20 54 58 60 61 70 73 80 109 110
123 182 175 172 169 160 139 130 127 124
–^Hasil sorting perulangan ke-11 ——————-
20 54 58 60 61 70 73 80 109 110
123 124 182 175 172 169 160 139 130 127
–^Hasil sorting perulangan ke-12 ——————-
20 54 58 60 61 70 73 80 109 110
123 124 127 182 175 172 169 160 139 130
–^Hasil sorting perulangan ke-13 ——————-
20 54 58 60 61 70 73 80 109 110
123 124 127 130 182 175 172 169 160 139
–^Hasil sorting perulangan ke-14 ——————-
20 54 58 60 61 70 73 80 109 110
123 124 127 130 139 182 175 172 169 160
–^Hasil sorting perulangan ke-15 ——————-
20 54 58 60 61 70 73 80 109 110
123 124 127 130 139 160 182 175 172 169
–^Hasil sorting perulangan ke-16 ——————-
20 54 58 60 61 70 73 80 109 110
123 124 127 130 139 160 169 182 175 172
–^Hasil sorting perulangan ke-17 ——————-
20 54 58 60 61 70 73 80 109 110
123 124 127 130 139 160 169 172 182 175
–^Hasil sorting perulangan ke-18 ——————-
20 54 58 60 61 70 73 80 109 110
123 124 127 130 139 160 169 172 175 182
–^Hasil sorting perulangan ke-19 ——————-
DATA_ANGKA setelah diurutkan…
—————————————————–
20 54 58 60 61 70 73 80 109 110
123 124 127 130 139 160 169 172 175 182
—————————————————–
>Exit code: 0
0 komentar:
Posting Komentar