Cod sursa(job #3303780)

Utilizator sergioneUngureanu Sergiu sergione Data 17 iulie 2025 20:50:06
Problema Radix Sort Scor 0
Compilator java Status done
Runda Arhiva educationala Marime 2 kb
import java.io.File;
import java.io.FileNotFoundException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Scanner;

import static java.lang.System.out;

public class Main {
    public static void main(String[] args) throws FileNotFoundException {
        ArrayList<Integer> arr = new ArrayList<Integer>();
        Scanner scan = new Scanner(new File("radixsort.in"));
        while(scan.hasNext()) {
            arr.add(scan.nextInt());
        }
        radixSort(arr);
        out.println(arr.toString());

        PrintWriter pw = new PrintWriter("radixsort.out");
        for(int num : arr) {
            pw.print(num + " ");
        }
        pw.close();
    }

    public static void radixSort(ArrayList<Integer> arr) {
        int maxim = getMax(arr);
        for(int i = 1; maxim / i > 0; i *= 10) {
            countSort(arr, i);
        }
    }

    public static void countSort(ArrayList<Integer> arr, int i) {
        ArrayList<Integer> output = new ArrayList<Integer>();
        for(int j = 0; j < arr.size(); j++) {
            output.add(0);
        }
        ArrayList<Integer> digits = new ArrayList<Integer>();
        for(int j = 0; j < 10; j++) {
            digits.add(0);
        }
        for(int x : arr) {
            int digit = (x / i) % 10;
            digits.set(digit, digits.get(digit) + 1);
        }
        for(int j = 1; j < 10; j++) {
            digits.set(j, digits.get(j) + digits.get(j - 1));
        }
        for(int j = arr.size() - 1; j >= 0; j--) {
            int digit = (arr.get(j) / i) % 10;
            output.set(digits.get(digit) - 1, arr.get(j));
            digits.set(digit, digits.get(digit) - 1);
        }

        for(int j = 0; j < arr.size(); j++) {
            arr.set(j, output.get(j));
        }
    }

    public static int getMax(ArrayList<Integer> arr) {
        int max = arr.get(0);
        for(int i = 1; i < arr.size(); i++) {
            if(arr.get(i) > max) {
                max = arr.get(i);
            }
        }
        return max;
    }
}