nurzain-pradana

Tugas2CountingSort.java

Nov 11th, 2025
146
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 6.38 KB | None | 0 0
  1. public class Tugas2CountingSort {
  2.     /** Membuat function sort, untuk mengurutkan array berdasarkan jumlah frekuensi **/
  3.     void sort(char arr[]) {
  4.         int n = arr.length;
  5.        
  6.         char output[] = new char[n];
  7.        
  8.         /** Array Count[] berfungsi untuk menyimpan jumlah kemunculan tiap karakter ASCII (0-255) **/
  9.         int count[] = new int[256];
  10.        
  11.         System.out.println("\nStep 1 : Inisialisasi count[] ke 0");
  12.        
  13.         for(int i = 0; i < 256; ++i)
  14.         {
  15.             count[i] = 0;
  16.         }
  17.        
  18.         System.out.println("Semua nilai count[i] di-set ke 0");
  19.        
  20.        
  21.         System.out.println("\nStep 2 : Hitung Frekuensi karakter ASCII");
  22.        
  23.         for(int i = 0; i < n; i++)
  24.         {
  25.             ++count[arr[i]];
  26.             System.out.printf("Karakter '%c' ditemukan, count['%c'] sekarang = %d\n", arr[i], arr[i], count[arr[i]]);
  27.         }
  28.        
  29.         /** Menampilkan Frekuensi akhir tiap karakter yang ada **/
  30.         System.out.println("\nFrekuensi akhir : ");
  31.        
  32.         for(int i = 0; i < 256; ++i)
  33.         {
  34.             if(count[i] > 0)
  35.             {
  36.                 System.out.printf("  %c : %d kali\n", (char)i, count[i]);
  37.             }
  38.         }
  39.        
  40.         System.out.println("\nStep 3 : Buat Count Kumulatif (untuk menentukan posisi terakhir karakter");
  41.         /** Membuat Count Kumulatif **/
  42.        
  43.        
  44.         int lastCount = 1;
  45.            
  46.         for(int i = 1; i <= 255; ++i)
  47.         {
  48.            
  49.             if(count[i] > 0)
  50.             {
  51.                
  52.                 System.out.println("Menkumulatifkan " + count[i] + " dengan " + count[i - 1] );
  53.                 count[i] += count[i - lastCount];
  54.                
  55.                 lastCount = 1;
  56.             } else {
  57.                 lastCount++;
  58.             }
  59.         }
  60.        
  61.        
  62.         /** Cetak hasil Kumulatif karakter yang muncul **/
  63.         System.out.println("Nilai count[] setelah kumulatif:");
  64.         for(int i = 0; i < 256; ++i)
  65.         {
  66.             if(count[i] > 0)
  67.             {
  68.                 System.out.printf("   %c : %d\n", (char)i, count[i]);
  69.             }
  70.         }
  71.        
  72.        
  73.         System.out.println("\n Step 4: Penempatan ke output[] berdasarkan count kumulatif");
  74.         /** Menyusun array output[] berdasarkan posisi akhir yang dihitung dari count[]
  75.          * secara Descending
  76.          */
  77.        
  78.         for(int i = n - 1; i >= 0; --i)
  79.         {
  80.             output[n- count[arr[i]]] = arr[i];
  81.            
  82.             int posisi = count[arr[i]] - 1;
  83.            
  84.             System.out.printf("i=%2d | arr[i]='%c' -> count['%c']=%2d -> output[%d]='%c'\n",
  85.                     i, arr[i], arr[i], count[arr[i]], posisi, arr[i]);
  86.            
  87.             --count[arr[i]];
  88.         }
  89.        
  90.        /** Tampilkan hasil output sementara **/
  91.        System.out.println("\nHasil output[] setelah semua penempatan :");
  92.        for(char c : output) System.out.print(c + " ");
  93.        System.out.println();
  94.        
  95.        System.out.println("\nStep 5 : Salin output[] ke arr[]");
  96.        /** Menyalin kembali hasil akhir dari output[] ke array utama arr[] **/
  97.        for(int i = 0; i < n; i++)
  98.        {
  99.            arr[i] = output[i];
  100.            System.out.printf("arr[%2d] = '%c'\n", i, arr[i]);
  101.        }
  102.        
  103.        System.out.println("\nArray sudah terurut sepenuhnya secara descending");
  104.        
  105.        
  106.     }
  107.    
  108.     public static void main(String args[]) {
  109.         /** Deklarasi Variabel **/
  110.        
  111.         char a1 = 'g';
  112.         char a2 = 'e';
  113.         char a3 = 'e';
  114.         char a4 = 'k';
  115.         char a5 = 's';
  116.         char a6 = 'f';
  117.         char a7 = 'o';
  118.         char a8 = 'r';
  119.         char a9 = 'g';
  120.         char a10 = 'e';
  121.         char a11 = 'e';
  122.         char a12 = 'k';
  123.         char a13 = 's';
  124.        
  125.         char arr[] = {a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13};
  126.        
  127.         System.out.print("Array sebelum dilakukan sorting : ");
  128.         for (char c : arr) System.out.print(c + " ");
  129.         System.out.println();
  130.        
  131.        
  132.         /** Membuat Variabel Tugas2CountingSort **/
  133.         Tugas2CountingSort ob = new Tugas2CountingSort();
  134.        
  135.         /** Menjalankan function sort **/
  136.         ob.sort(arr);
  137.        
  138.        
  139.        
  140.         System.out.print("\nSetelah dilakukan sorting secara Descending : ");
  141.         for(char c : arr) System.out.print(c + " ");
  142.        
  143.         System.out.println();
  144.  
  145.  
  146.        /** Analisa Algoritma Counting Sort **/
  147.        String hasilAnalisa = """
  148.                             ================================================
  149.                              KESIMPULAN ALGORITMA COUNTING SORT
  150.                             ================================================
  151.                             Counting Sort adalah algoritma pengurutan non-komparatif
  152.                             (tanpa perbandingan)yang bekerja dengan cara menghitung jumlah
  153.                             kemunculan tiap elemen.
  154.  
  155.                             Proses utama:
  156.                             1. Inisialisasi array count[] berukuran 256 dengan nilai awal 0.
  157.                             2. Hitung jumlah kemunculan setiap karakter dari array input.
  158.                             3. Ubah count[] menjadi bentuk kumulatif untuk mengetahui posisi akhir.
  159.                             4. Tempatkan elemen ke array output[] sesuai posisi kumulatif,
  160.                                dan disusun secara Descending
  161.                             5. Salin hasil akhir dari output[] ke arr[].
  162.  
  163.                             Kelebihan:
  164.                             - Sangat cepat untuk rentang data kecil.
  165.                             - Tidak menggunakan perbandingan antar elemen.
  166.  
  167.                             Kekurangan:
  168.                             - Membutuhkan memori tambahan (array count dan output).
  169.                             - Tidak cocok untuk data dengan rentang nilai yang sangat besar.
  170.  
  171.                             Contoh hasil:
  172.                             Array awal  : [g, e, e, k, s, f, o, r, g, e, e, k, s]
  173.                             Hasil akhir : [s, s, r, o, k, k, g, g, f, e, e, e, e]
  174.                             ================================================
  175.                             """;
  176.        
  177.        System.out.println(hasilAnalisa);
  178.        
  179.  
  180.     }
  181. }
  182.  
Advertisement
Add Comment
Please, Sign In to add comment