Sorting atau mengurutkan data dalam array artinya adalah menukar-nukar posisi atau urutan atau index data dalam array sedemikian rupa sehingga diperoleh array dengan data yang berurutan secara naik dari kecil ke besar (ascending) atau secara turun dari besar ke kecil (descending).

Perhatikan contoh data berikut ini.

10, 5, 2, 8, 4

Jika diurutkan secara ascending akan menjadi

2, 4, 5, 8, 10

Dan jika diurutkan secara descending akan menjadi

10, 8, 5, 4, 2

Untuk mengubah urutan data diperlukan teknik atau cara. Dalam pemrograman disebut algoritma. Ada beberapa teknik pengurutan data antara lain: Bubble Sort, Quick Sort, Heap Sort.

Pada tulisan ini akan dibahas secara ringkas tentang teknik 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 (swapped).

Btw, 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.

Namun demikian, Anda akan mendapatkan contoh program C yang detil dan mudah dipahami. Simak kode programnya berikut ini. Btw, saya menggunakan PellesC untuk pemrograman C pada sistem operasi Windows.

Kode Program

// Contoh Program Sorting Bubble-Sort
// Chandra MDE, telinks.wordpress.com
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define jumlah_data 10

int data_angka[jumlah_data];
int i, j, t;

int main(void)
{
   // buat data secara acak
   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]);
   }

   //mari kita urutkan
   for (i=0; i<jumlah_data-1; i++)
   {
      for (j=i+1; j<jumlah_data; j++)
      {
         // < = ascending, > = descending
         if (data_angka[i] < data_angka[j])
         {
             t = data_angka[i];
             data_angka[i] = data_angka[j];
             data_angka[j] = t;
         }
     }

     //tampilkan hasil pada setiap step pengurutan
     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 setelah diurutkan
   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");
}

Penjelasan Singkat

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.

   //tampilkan hasil pada setiap step pengurutan
   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);

Dan setelah proses pengurutan data selesai, maka program menampilkan nilai data array data_angka yang sudah diurutkan.

   //tampilkan data_angka setelah diurutkan
   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");

Output Program (Ascending)

Output Program (Descending)

Pelatihan Privat Online

Kami melayani Pelatihan Privat Pemrograman Bahasa C Tingkat Dasar untuk beberapa platform antara lain:

  • Windows, menggunakan Pelles C
  • Linux, menggunakan GCC
  • Mikrokontroler, menggunakan Arduino IDE dan AVR-GCC

Info lebih lanjut mengenai Pelatihan Privat Pemrograman, silakan menghubungi WA 0882-3560-7047.

Semoga bermanfaat. Selamat belajar. Selamat berkarya.