Selasa, 13 Januari 2015

Merge Sort pada Java

Hai semua~

Setelah sebelumnya kita membahas tentang salah satu Algoritma Sorting (Insertion Sort), sekarang kita membahas salah satu algoritma sorting lain yaitu Merge Sort .

Merge Sort adalah algoritma pengurutan dalam ilmu komputer yang dirancang untuk memenuhi kebutuhan pengurutan atas suatu rangkaian data yang tidak memungkinkan untuk ditampung dalam memori komputer karena jumlahnya yang terlalu besar. Algoritma ini ditemukan oleh John von Neumann pada tahun 1945.

Algoritma pengurutan data merge sort dilakukan dengan menggunakan cara divide and conquer yaitu dengan memecah kemudian menyelesaikan setiap bagian kemudian menggabungkannya kembali. Pertama data dipecah menjadi 2 bagian dimana bagian pertama merupakan setengah (jika data genap) atau setengah minus satu (jika data ganjil) dari seluruh data, kemudian dilakukan pemecahan kembali untuk masing-masing blok sampai hanya terdiri dari satu data tiap blok.

Setelah itu digabungkan kembali dengan membandingkan pada blok yang sama apakah data pertama lebih besar daripada data ke-tengah+1, jika ya maka data ke-tengah+1 dipindah sebagai data pertama, kemudian data ke-pertama sampai ke-tengah digeser menjadi data ke-dua sampai ke-tengah+1, demikian seterusnya sampai menjadi satu blok utuh seperti awalnya. Sehingga metode merge sort merupakan metode yang membutuhkan fungsi rekursi untuk penyelesaiannya.




Berikut adalah source code Merge Sort


/*
* Mengimplementasikan Merge Sort pada Java
*/
 
import java.util.Scanner;
 
/* Class MergeSort */
public class MergeSort 
{
   /* Fungsi Merge Sort */
   public static void sort(int[] a, int low, int high) 
   {
       int N = high - low;         
       if (N <= 1) 
           return; 
       int mid = low + N/2; 
       
                // recursively sort 
       sort(a, low, mid); 
       sort(a, mid, high); 
       
                // memisahkan 2 sub array yang berurutan 
       int[] temp = new int[N];
       int i = low, j = mid;
       for (int k = 0; k < N; k++) 
       {
           if (i == mid)  
               temp[k] = a[j++];
           else if (j == high) 
               temp[k] = a[i++];
           else if (a[j]<a[i]) 
               temp[k] = a[j++];
           else 
               temp[k] = a[i++];
       }    
       for (int k = 0; k < N; k++) 
           a[low + k] = temp[k];         
   }
   
            /* Main method */
   public static void main(String[] args) 
   {
       Scanner scan = new Scanner( System.in );        
       System.out.println("Test Merge Sort \n");
       int n, i;
            
            /* Memasukan jumlah data dalam integer */
       System.out.println("Masukan jumlah element integer");
       n = scan.nextInt();
       /* Membuat integer array di data n */
       int arr[] = new int[ n ];
       /* Menerima data */
       System.out.println("\nMasukan nilai "+ n +" element integer");
       for (i = 0; i < n; i++)
           arr[i] = scan.nextInt();
       
            /* Memanggil metode sorting (Merge Sort) */
       sort(arr, 0, n);
       
            /* Menampilkan data array yang sudah diurutkan */
       System.out.println("\nElement integer setelah diurutkan ");        
       for (i = 0; i < n; i++)
           System.out.print(arr[i]+" ");            
       System.out.println();            
                }    
}


Dan ini contoh program yang sudah dijalankan menggunakan Merge Sort


Sekian tutorial kali ini . Semoga bermanfaat~

3 komentar: