Search This Blog

Wednesday 31 August 2016

Bubble Sort

Untuk topik kali ini penulis ingin membahas sedikit mengenai sorting dan memberikan sedikit contoh metode sorting dengan bubble sort. Sekilas mengenai sorting, sorting merupakan proses untuk mengurutkan data dalam sebuah memori dengan urut ascending (urut menaik) atau Descending (urut menurun). Untuk ascending atau urut menaik, maka nilai diurutkan dari yang terkecil hingga yang terbesar, sedangkan pada descending dengan urutan yang menurun maka nilai yang diurutkan ialah dari yang terbesar hingga yang terkecil. Sorting sendiri terbagi menjadi dua, yaitu Internal sort dimana data yang diurutkan ialah data yang berada dalam media penyimpanan internal, dan juga External sort dimana data yang akan diurutkan berada dalam media penyimpanan external. Jika diibaratkan dengan sebuah handphone, media penyimpanan internal itu merupakan memori handphone itu sendiri, sedangkan untuk media penyimpanan externalnya ialah memori (seperti micro sd) yang biasa disisipkan oleh pengguna handphone itu sendiri.

Untuk sorting sendiri, banyak sekali metode yang dapat dilakukan, seperti pada internal sort yang dapat dilakukan dengan bubble sort, selection sort, insertion sort, shell sort, merge sort, radix sort, quick sort, heap sort, namun untuk topik yang dibahas kali ini ialah bubble sort. Metode bubble sort sendiri bertugas untuk menempatkan nilai terbesar di sebelah kanan pada setiap perulangan yang dilakukan. Dengan kata lain proses bubble sort ialah proses sorting dengan menempatkan nilai terbesar ada posisi paling kanan. Jika kita mensorting angka 97,1,24. Maka nanti angka 97 akan ditempatkan pada posisi akhir pada paling kanan, setelah itu nanti angka 24 akan berada pada posisi tepat disebelah kiri angka 97 tersebut, begitupun dengan angka 1, ia akan berada tepat disebelah kiri angka 24. Namun tetap proses yang ditempuh karena menggunakan perulangan, maka yang pertama dilakukan ialah pertukaran angka dari indeks yang pertama atau indeks 0, jika indeks nol pada contoh tersebut 97 dan indeks berikutnya berisi nilai 1, maka kedua angka tersebut akan bertukar posisinya, karena angka 97 lebih besar dari angka 1, dengan demikian urutannya akan berubah menjadi 1,97,24. Setelah itu, maka proses selanjutnya untuk membandingkan angka 97 dengan angka 24, jika angka 97 lebih besar dari angka 24, maka kedua angka tersebut akan bertukar posisi, angka 97 akan berada paling kanan (karena menjadi angka tertinggi dari ketiga angka tersebut) dan angka 24 akan berada tepat disebelah kiri angka 97nya. Dengan demikian urutannya akan berubah menjadi 1,24,97. Begitupun dengan proses selanjutnya, akan ada perbandingan angka 1 dengan angka 24, jika memang angka 1 nilainya lebih besar dari angka 24, maka kedua angka tersebut akan bertukar posisi. Namun dikarenakan angka 1 tidak lebih besar dari angka 24 (nilainya), maka kedua angka tersebut akan tetap berada di posisinya masing-masing. Walaupun angkanya banyak, jika jumlah perulangan yang dilakukan sesuai dengan jumlah angka yang akan dibandingkan, maka proses perbandingan akan berlangsung lebih banyak sesuai dengan jumlah perulangan dan angka yang ada, tetapi tetap saja pada intinya proses yang ditempuh akan sama selama dilakukan dengan metode yang sama, yaitu dengan memposisikan nilai tertinggi pada posisi paling kanan. Perhatikan contoh program berikut:

#include<stdio.h>
main(){
int R[3]={97,1,24}, y, q, T;
printf("  Bentuk awalnya:\n\n");

for(q=0; q<3; q++){
printf("%5i", R[q]);
}

for(q=0; q<2; q++){
for(y=0; y<2; y++){
if(R[y]>R[y+1]){
T=R[y];
R[y]=R[y+1];
R[y+1]=T;
}
}
}
printf("\n\n\n\n\n   Hasil sorting:\n\n");

for(q=0; q<3; q++){
printf("%5i", R[q]);
}
}

Dalam contoh program tersebut terlihat ada variabel array dengan nama variabel R, dimana variabel R memiliki 3 indeks dengan isi variabel yang ialah tipe data numerik dengan nilai masing-masing 97,1 dan 24. Terdapat pula variabel y dan q yang bertugas untuk membantu proses perulangan serta variabel T yang bertugas untuk membantu proses sorting itu sendiri. Mengapa proses sorting ini menggunakan bantuan variabel lain? Karena pada proses bubble sort membutuhkan 3 variabel berbeda untuk mengurutkan nilai-nilai yang dimaksud. Setelah deklarasi dilakukan, seperti yang biasa dilakukan pada sebuah program ialah memeri keterangan (bilai perlu) pada saat mencetak ke layar. Keterangan ini tidak dapat dianggap remeh, karena user tidak akan tahu apa yang harus ia lakukan saat menghadapi sebuah hal baru tanpa ia tahu prosesnya. Maka jika diperhatikan dari sisi usability, keterangan itu sudah jelas akan sangat mempermudah user dalam memahami apa yang harus ia lakukan dengan apa yang ada dihadapannya (di layar). Dan perulangan dibawahnyapun ialah proses untuk keterangan pula, kedua hal itu sama-sama bertugas untuk mencetak keterangan ke layar, hanya saja bedanya proses cetak yang pertama dilakukan secara langsung sedangkan proses cetak yang kedua menggunakan bantuan perulangan. Perulangan sendiri dilakukan tidak lain karena proses cetak yang dilakukan ialah untuk mencetak isi dari variabel array. Dengan demikian proses perulanganpun dilakukan sebanyak isi dari variabel array tersebut.

Mari perhatikan proses sortingnya. Proses sorting dalam contoh program diatas dilakukan dalam dua buah perulangan, dimana perulangan kedua berada dalam perulangan. Dengan kata lain, pada proses terebut tidak menjadi dua perulangan, namun satu perulangan dengan perulangan didalamnya, dapat dikatakan bahwa proses perulangan tersebut ialah proses perulangan dalam perulangan. Mengapa proses sorting tersebut dilakukan dalam perulangan yang terdapat dalam perulangan pula? Ialah karena setiap nilai yang terkandung dalam variabel array akan mengalami perbandingan sebanyak jumlah isi variabel array sendiri, seperti dalam contoh yang terdapat 3 buah nilai dan setiap nilai akan mengalami 2 kali perbandingan. Jika 2 dikali 2 maka hasilnya ialah 4, namun bukan berarti dilakukan dalam 4 kali perulangan dalam satu buah metode perulangan. Karena jika demikian, maka hanya akan ada satu buah nilai yang dibandingkan sebanyak 4 kali, sedangkan 2 angka lainnya tidak dibandingkan satu sama lain (hanya pernah dibandingkan dengan angka yang satu tadi). Namun pada proses perulangan tersebut maka jika disesuaikan dengan contoh diatas, pada perulangan pertama di for() yang pertama, angka pada indeks pertama akan dibandingkan sebanyak 2 kali, dimana yang pertama ialah indeks pertama (indeks 0) dengan indeks kedua (indeks 1), lalu indeks tersebut (yang tadi indeks pertama) dibandingkan kembali dengan indeks ketiga (indeks 2). Lalu pada perulangan kedua dalam for() yang pertama, akan ada proses yang sama namun dengan isi indeks yang sedikit berbeda (andai angkanya belum tersusun rapi). Lalu mengapa hanya 2 kali perulangan? Karena jika indeks 0 pernah dibandingkan dengan indeks 1, indeks 1 pernah dibandingkan dengan indeks 2 serta indeks 0 pernah dibandingkan dengan indeks 2, maka hanya butuh untuk merapihkan saja. Tidak perlu terlalu banyak perbandingan untuk itu. Bisa saja jika memang disesuaikan, membuat perulangan lebih banyak dari itu, seperti perulangan pertama sebanyak 3x dan dan perulangan didalamnya sebanyak 3x pula (untuk diterapkan pada contoh diatas), namun jika dengan 2x2 perulangan sudah cukup, untuk apa perulangan tersebut diperbanyak lagi?

Selain itu, mari kita perhatikan isi didalam perulangan tersebut. Terdapat kondisi if(), dimana kondisi tersebut berperan sebagai pengarah program, jika memang indeks sekian(indeks sesuai dengan hitungan perulangan) lebih besar dari indeks berikutnya, maka akan dikerjakan statement true dalam kondisi if() tersebut. Statement true dalam kondisi tersebut berisikan 3 buah perintah, dimana satu sama lain perintahnya saling berhubungan. Dalam baris pertama statement true tersebut terdapat perintah untuk mengisi variabel T dengan isi variabel yang sedang ditunjuk (sesuai dengan indeks perulangan). Lalu pada baris keduanya, terdapat perintah untuk mengisi indeks yang sedang ditunjuk tersebut dengan isi indeks berikutnya (yang sudah dibandingkan tadi dan mengandung nilai lebih besar darinya). Dan perintah terakhir ialah untuk mengisi variabel berikutnya tersebut dengan isi variabel T, dimana variabel T berisi nilai yang sebelumnya menjadi isi variabel dari indeks yang sedang ditunjuk. Jika diperhatikan proses tersebut, maka sebenarnya yang dilakukan oleh program tak lain untuk menukar nilai dalam indeks yang ditunjuk dengan nilai dalam indeks didepannya (indeks yang dibandingkan), hanya itu yang dilakukan oleh program, dan variabel T hanya bertugas untuk membantu proses tersebut. Dan setelah proses sorting selesai, ada satu perulangan lagi, perulangan ini tak lain hanya untuk memerikan informasi pada user dengan percetakan ke layar menganai hasil yang sebelumnya menjadi keterangan untuk user. Sebenarnya sama saja, sama-sama bertugas untuk mencetak pada layar, hanya saja yang pertama mencetak nilai awal, dan kali ini mencetaknya nilai akhir (hasil).

No comments:

Post a Comment