Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public class Tugas2CountingSort {
- /** Membuat function sort, untuk mengurutkan array berdasarkan jumlah frekuensi **/
- void sort(char arr[]) {
- int n = arr.length;
- char output[] = new char[n];
- /** Array Count[] berfungsi untuk menyimpan jumlah kemunculan tiap karakter ASCII (0-255) **/
- int count[] = new int[256];
- System.out.println("\nStep 1 : Inisialisasi count[] ke 0");
- for(int i = 0; i < 256; ++i)
- {
- count[i] = 0;
- }
- System.out.println("Semua nilai count[i] di-set ke 0");
- System.out.println("\nStep 2 : Hitung Frekuensi karakter ASCII");
- for(int i = 0; i < n; i++)
- {
- ++count[arr[i]];
- System.out.printf("Karakter '%c' ditemukan, count['%c'] sekarang = %d\n", arr[i], arr[i], count[arr[i]]);
- }
- /** Menampilkan Frekuensi akhir tiap karakter yang ada **/
- System.out.println("\nFrekuensi akhir : ");
- for(int i = 0; i < 256; ++i)
- {
- if(count[i] > 0)
- {
- System.out.printf(" %c : %d kali\n", (char)i, count[i]);
- }
- }
- System.out.println("\nStep 3 : Buat Count Kumulatif (untuk menentukan posisi terakhir karakter");
- /** Membuat Count Kumulatif **/
- int lastCount = 1;
- for(int i = 1; i <= 255; ++i)
- {
- if(count[i] > 0)
- {
- System.out.println("Menkumulatifkan " + count[i] + " dengan " + count[i - 1] );
- count[i] += count[i - lastCount];
- lastCount = 1;
- } else {
- lastCount++;
- }
- }
- /** Cetak hasil Kumulatif karakter yang muncul **/
- System.out.println("Nilai count[] setelah kumulatif:");
- for(int i = 0; i < 256; ++i)
- {
- if(count[i] > 0)
- {
- System.out.printf(" %c : %d\n", (char)i, count[i]);
- }
- }
- System.out.println("\n Step 4: Penempatan ke output[] berdasarkan count kumulatif");
- /** Menyusun array output[] berdasarkan posisi akhir yang dihitung dari count[]
- * secara Descending
- */
- for(int i = n - 1; i >= 0; --i)
- {
- output[n- count[arr[i]]] = arr[i];
- int posisi = count[arr[i]] - 1;
- System.out.printf("i=%2d | arr[i]='%c' -> count['%c']=%2d -> output[%d]='%c'\n",
- i, arr[i], arr[i], count[arr[i]], posisi, arr[i]);
- --count[arr[i]];
- }
- /** Tampilkan hasil output sementara **/
- System.out.println("\nHasil output[] setelah semua penempatan :");
- for(char c : output) System.out.print(c + " ");
- System.out.println();
- System.out.println("\nStep 5 : Salin output[] ke arr[]");
- /** Menyalin kembali hasil akhir dari output[] ke array utama arr[] **/
- for(int i = 0; i < n; i++)
- {
- arr[i] = output[i];
- System.out.printf("arr[%2d] = '%c'\n", i, arr[i]);
- }
- System.out.println("\nArray sudah terurut sepenuhnya secara descending");
- }
- public static void main(String args[]) {
- /** Deklarasi Variabel **/
- char a1 = 'g';
- char a2 = 'e';
- char a3 = 'e';
- char a4 = 'k';
- char a5 = 's';
- char a6 = 'f';
- char a7 = 'o';
- char a8 = 'r';
- char a9 = 'g';
- char a10 = 'e';
- char a11 = 'e';
- char a12 = 'k';
- char a13 = 's';
- char arr[] = {a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13};
- System.out.print("Array sebelum dilakukan sorting : ");
- for (char c : arr) System.out.print(c + " ");
- System.out.println();
- /** Membuat Variabel Tugas2CountingSort **/
- Tugas2CountingSort ob = new Tugas2CountingSort();
- /** Menjalankan function sort **/
- ob.sort(arr);
- System.out.print("\nSetelah dilakukan sorting secara Descending : ");
- for(char c : arr) System.out.print(c + " ");
- System.out.println();
- /** Analisa Algoritma Counting Sort **/
- String hasilAnalisa = """
- ================================================
- KESIMPULAN ALGORITMA COUNTING SORT
- ================================================
- Counting Sort adalah algoritma pengurutan non-komparatif
- (tanpa perbandingan)yang bekerja dengan cara menghitung jumlah
- kemunculan tiap elemen.
- Proses utama:
- 1. Inisialisasi array count[] berukuran 256 dengan nilai awal 0.
- 2. Hitung jumlah kemunculan setiap karakter dari array input.
- 3. Ubah count[] menjadi bentuk kumulatif untuk mengetahui posisi akhir.
- 4. Tempatkan elemen ke array output[] sesuai posisi kumulatif,
- dan disusun secara Descending
- 5. Salin hasil akhir dari output[] ke arr[].
- Kelebihan:
- - Sangat cepat untuk rentang data kecil.
- - Tidak menggunakan perbandingan antar elemen.
- Kekurangan:
- - Membutuhkan memori tambahan (array count dan output).
- - Tidak cocok untuk data dengan rentang nilai yang sangat besar.
- Contoh hasil:
- Array awal : [g, e, e, k, s, f, o, r, g, e, e, k, s]
- Hasil akhir : [s, s, r, o, k, k, g, g, f, e, e, e, e]
- ================================================
- """;
- System.out.println(hasilAnalisa);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment