nurzain-pradana

TugasCountingSort.java

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