Friday, November 16, 2012

Java Source Code : Bucket Sort

Sorting dalam bahasa Indonesia bisa berarti banyak. Bisa mengelompokkan ataupun mengurutkan. Namun dalam postingan saya kali ini, sorting adalah berarti mengurutkan. Kali ini saya akan membuat program yang akan mengurutkan deret angka menggunakan algoritma Bucket Sort.

Dalam mengurutkan angka (sorting), terdapat banyak sekali algoritma. Salah satunya adalah Bucket Sort. Bucket Sort adalah algoritma sorting yang mempartisi deret angka menjadi beberapa deret yang kemudian dianalogikan menjad ember. Setiap angka dalam deret yang akan diurutkan diambil satu per satu dan dimasukkan ke ember yang memenuhi syarat. Embernya sudah harus urut mulai dari ember dengan nilai terkecil. Setelah itu, angka-angka diurutkan dalam masing-masing ember dan akan diambil lagi dari ember yang paling kecil terlebih dahulu. Jadilah deret angka yang sudah urut. Berikut analogi yang saya ambil dari wikipedia.
Sumber: wikipedia.org
Nah, pertanyaannya, bagaimana membuat programnya dalam java? Saya akan menunjukkan source code BucketSort.java di bawah ini. Jalan pikirnya adalah, saya mencari nilai terbesar dari sebuah deret angka yang akan diurutkan, kemudian nilai itu saya jadikan banyaknya ember. Embernya adalah ember 0 sampai angka terbesar. Setiap angka dalam deret akan diambil dan dimasukkan ke ember dengan nilai yang sama (misal : angka 2 akan dimasukkan ke ember nomer 2). Setelah itu, program akan mengambil angka2 dari setiap ember secara berurutan (mulai dari yang terkecil). Begitulah deskripsi program ini. Dan berikut ini adalah kodenya :
import java.util.*;

public class BucketSort {

 public static int[] bucketSort(int[] arr) {
  int i, j, terbesar = 0;
  //membuat array 1D tanpa mendefinisikan panjang arraynya
  int[] ember;
  
  
  /*mencari nilai terbesar dari array yang akan disorting
  dalam kodingan ini yaitu array arr[] lalu nilai
  terbesarnya dimasukkan ke variabel terbesar*/
  for(i = 0; i < arr.length; i++ ) {
   if(terbesar < arr[i]){
    terbesar = arr[i];
   }
  }
  
  
  /*mendefinisikan panjang array ember[] menjadi sepanjang
  nilai terbesar + 1 dan digunakan sebagai banyaknya ember*/
  ember = new int [terbesar + 1];
  
  
  /*memasukkan nilai dari array arr[] ke embernya masing2
  misal: jika nilai dari arr[3] = 77, maka dia akan dimasukkan
  ke ember[77] dan nilai dari ember[77] yang awalnya
  adalah 0 di ++ menjadi 1*/
  for(i = 0; i < arr.length; i++ ) {
   ember[arr[i]]++;
  }
  
  
  /*menjelajahi ember 1 per 1 dari awal dan jika ada nilainya
  maka akan dimasukkan ke arr[] secara berurutan. Nanti, jika
  sudah semua ember dijelajahi dan dimasukkan semua ke arr[],
  maka secara otomatis, arr[] sudah terurutkan angkanya*/
  for (i = 0, j = 0; i < ember.length; i++) {
   for (; ember[i] > 0; (ember[i])--) {
    arr[j] = i;
    j++;
              }
         }
  
  return arr;
 }
 
 public static void main(String[] args) {
 
  System.out.print("Berapa data yang mau diurutkan? ");
  Scanner sc = new Scanner(System.in);
  int panjang = sc.nextInt();
  
  int[] arr = new int[panjang];
  
  //meminta inputan isi array 1 per 1
  for(int i = 1; i <= panjang; i++ ){
   System.out.print("Angka ke " + i + ": ");
   arr[i-1] = sc.nextInt();
  }
  
  //menampilkan hasil print array yang belum disort
  System.out.print("Sebelum diurutkan: ");
  for (int i = 0; i < arr.length; i++) {
   System.out.print(arr[i] + " ");
  }
  System.out.println("\n");
  
  //mensorting array arr[]
  arr = bucketSort(arr);
  
  //menampilkan hasil print array yang sudah disort
  System.out.print("Setelah diurutkan: ");
  for (int i = 0; i < arr.length; i++) {
   System.out.print(arr[i] + " ");
  }
  System.out.println();
 }
}
Berikut ini adalah bagaimana program ini berjalan :

Nah, silahkan dicoba program ini dengan inputan yang anda inginkan. InsyaAllah akan terurut angka yang anda inputkan :D Terima kasih sebelumnya dan semoga bermanfaat :D



Artikel Terkait

No comments:

Post a Comment