nurzain-pradana

Tugas2MergeSort.java

Nov 11th, 2025
146
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5.99 KB | None | 0 0
  1.  
  2. import java.util.Arrays;
  3.  
  4. public class Tugas2MergeSort {
  5.     /** Membuat Function Sort
  6.      *  Berfungsi untuk membagi array menjadi 2 bagian secara rekursif,
  7.      *  Kemudian mengurutkannya secara Descending dari Terbesar
  8.      *  Sampai Terkecil
  9.      **/
  10.    
  11.     void sort(int arr[], int l, int r){
  12.        
  13.         System.out.println();
  14.         System.out.println("Memanggil Function Sort(arr, " + l + ", " + r + ") : bagian saat ini " + Arrays.toString(Arrays.copyOfRange(arr, l, r + 1)));
  15.        
  16.         if(l < r)
  17.         {
  18.             int m = (l + r) / 2;
  19.             System.out.println("  Membagi Menjadi 2 Bagian : [" + l + ".." + m + "] dan [" + (m+1) + ".." + r + "]");
  20.            
  21.             /** Urutkan Bagian Kiri **/
  22.             sort(arr, l, m);
  23.            
  24.             /** Urutkan Bagian Kanan **/
  25.             sort(arr, m + 1, r);
  26.            
  27.             /** Gabungkan 2 Bagian yang sudah terurut secara Descending **/
  28.             merge(arr, l, m, r);
  29.            
  30.         } else {
  31.             /** Tidak perlu diurutkan, karena hanya ada 1 elemen saja **/
  32.             System.out.println("  Bagian["+l+".."+ r +"] hanya satu elemen, tidak perlu diurutkan");
  33.         }
  34.        
  35.     }
  36.    
  37.    
  38.    
  39.     /** Membuat Function Merge
  40.      * Untuk menggabungkan 2 bagian array yang sudah terurut
  41.      */
  42.    
  43.     void merge(int[] arr, int l, int m, int r)
  44.     {
  45.         int n1 = m - l + 1;
  46.         int n2 = r - m;
  47.        
  48.         int L[] = new int[n1];
  49.         int R[] = new int[n2];
  50.        
  51.         /** Menyalin elemen ke array sementara L & R **/
  52.         for(int i = 0; i < n1; i++)
  53.         {
  54.             L[i] = arr[l + i];
  55.         }
  56.        
  57.         for(int j = 0; j < n2; j++){
  58.             R[j] = arr[m + 1 + j];
  59.         }
  60.        
  61.         System.out.println();
  62.         System.out.println("Memulai proses Merge untuk indeks ["+l+".."+m+"] dan ["+(m+1)+".."+r+"]");
  63.         System.out.println("  Bagian Kiri (L) : " + Arrays.toString(L));
  64.         System.out.println("  Bagian Kanan (R) : " + Arrays.toString(R));
  65.        
  66.         int i = 0, j = 0;
  67.         int k = l;
  68.        
  69.         /** Membandingkan elemen dari L dan R lalu dimasukan kedalam array utama arr **/
  70.         while (i < n1 && j < n2)
  71.         {
  72.             System.out.println("  Bandingkan L["+i+"] = " + L[i] + " dengan R["+j+"] = " + R[j]);
  73.            
  74.             if(L[i] >= R[j])
  75.             {
  76.                 arr[k] = L[i];
  77.                 System.out.println("    Ambil L["+i+"] = " + L[i] + " ke arr["+k+"]");
  78.                 i++;
  79.             } else {
  80.                 arr[k] = R[j];
  81.                 System.out.println("    Ambil R["+j+"] = " + R[j] + " ke arr["+k+"]");
  82.                 j++;
  83.             }
  84.             k++;
  85.             System.out.println("      Hasil sementara : " + Arrays.toString(arr));
  86.         }
  87.        
  88.         /** Jika masih ada sisa elemen di L, masukkan ke array utama arr. **/
  89.         while(i < n1)
  90.         {
  91.             arr[k] = L[i];
  92.             i++;
  93.             k++;
  94.         }
  95.         /** Jika masih ada sisa elemen di R, masukkan ke array utama arr. **/
  96.         while(j < n2)
  97.         {
  98.             arr[k] = R[j];
  99.             j++;
  100.             k++;
  101.         }
  102.        
  103.         System.out.println("  Selesai merge untuk indeks ["+l+".."+r+"]: " + Arrays.toString(Arrays.copyOfRange(arr, l, r + 1)));
  104.        
  105.     }
  106.    
  107.    
  108.     /** Membuat Function untuk mencetak isi array, selain menggunakan Library Arrays.**/
  109.     static void printArray(int arr[])
  110.     {
  111.         int n = arr.length;
  112.         for(int i = 0; i < n; i++)
  113.         {
  114.             System.out.print(arr[i] + " ");
  115.         }
  116.         System.out.println();
  117.     }
  118.    
  119.    
  120.     /** Membuat Function Main **/
  121.     public static void main(String args[]) {
  122.         /** Membuat Variabel yang akan diurutkan menggunakan merge sort **/
  123.         int a1 = 25;
  124.         int a2 = 7;
  125.         int a3 = 18;
  126.         int a4 = 42;
  127.         int a5 = 13;
  128.         int a6 = 9;
  129.         int a7 = 31;
  130.         int a8 = 2;
  131.        
  132.         int arr[] = {a1, a2, a3, a4, a5, a6, a7, a8};
  133.        
  134.         /** menampilkan array awal **/
  135.         System.out.println("Array awal : ");
  136.         printArray(arr);
  137.        
  138.         /** Process Merge Sort **/
  139.         Tugas2MergeSort ob = new Tugas2MergeSort();
  140.         ob.sort(arr, 0, arr.length - 1);
  141.        
  142.         System.out.println();
  143.         System.out.println("Hasil array menggunakan Merge Sort secara Descending : ");
  144.         printArray(arr);
  145.        
  146.         /** Analisa Algoritma Merge Sort **/
  147.         String hasilAnalisa = """
  148.                              ==================================================
  149.                              KESIMPULAN ALGORITMA MERGE SORT
  150.                              ==================================================
  151.                              
  152.                              Merge Sort adalah algoritma pengurutan dengan konsep
  153.                              'divide dan conquer', dimana :
  154.                              - Membagi array menjadi dua bagian secara rekursif (divide)
  155.                              - Mengurutkan kembali tiap bagian yang terpisah
  156.                              - Menggabungkan kembali 2 bagian secara terurut.
  157.                              
  158.                              Kelebihan :
  159.                              - Stabil dan efisien untuk data besar
  160.                              - Waktu eksekusi konsisten di semua kasus
  161.                              
  162.                              Kekurangan :
  163.                              - Membutuhkan memori tambahan (untuk array sementara)
  164.                              - Kurang efisien untuk data kecil
  165.                              
  166.                              Dari Source Code ini, Contoh Hasilnya :
  167.                              Array Awal : [25, 7, 18, 42, 13, 9, 31, 2]
  168.                              Hasil Akhirnya : [42, 31, 25, 18, 13, 9, 7, 2]
  169.                              """;
  170.        
  171.         System.out.println(hasilAnalisa);
  172.  
  173.     }
  174.    
  175. }
  176.  
Advertisement
Add Comment
Please, Sign In to add comment