Tutorial C/C++: Contoh Program Mengurutkan Data Menggunakan Algoritma Gelembung (Bubble-Sort)


c_bubblesort

Mengurutkan data acak menjadi data yang urut termasuk pelajaran dasar pada materi pemrograman. Ada beberapa algoritma pengurutan data yang umumnya diperkenalkan pada materi dasar pemrograman yakni bubble-sort, quicksort, dan heapsort. Jika Anda tertarik atau tertantang untuk mengetahui algoritma pengurutan data yang lain (jumlahnya sangat banyak), Anda bisa memulainya dari halaman Wikipedia berikut ini: Sorting Algorithm.🙂

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.com

#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");
}

Pertama-tama, program membuat data bilangan acak menggunakan fungsi srand() dan fungsi rand() sebagai berikut:

// Bangkitkan bilangan acak sebanyak jumlah_data
    srand(time(NULL));
    for (i=0; i<jumlah_data; i++)
        DATA_ANGKA[i] = rand()%200;

Fungsi 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.🙂

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])
            {
                t = DATA_ANGKA[i];
                DATA_ANGKA[i] = DATA_ANGKA[j];
                DATA_ANGKA[j] = t;
            }

Untuk mendapatkan hasil deret bilangan yang terurut dari besar ke kecil (descending), gantilah operator > dengan operator <, atau tukarkan indeks i dan j.

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.c   
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

Setelah 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.

Nah, cukup mudah bukan? Saya yakin mempelajari algoritma gelembung ini jauh lebih mudah dibanding mempelajari teknik peniupan gelembung ala SpongeBob (lihat episode berjudul: Bubblestand).😀

Semoga bermanfaat, selamat belajar, dan selamat berkarya!

🙂

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s