Cod sursa(job #3265480)

Utilizator ShokapKaplonyi Akos Shokap Data 30 decembrie 2024 14:27:14
Problema Radix Sort Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.21 kb
#include <iostream>
#include <fstream>

void countingSort (int arr[], int n, int exp){
    int *output = new int[n];
    int i, count[10] = { 0 };

    for (i = 0; i < n; i++)
        count[(arr[i] / exp) % 10]++;

    for (i = 1; i < 10; i++)
        count[i] += count[i - 1];

    for (i = n - 1; i >= 0; i--) {
        output[count[(arr[i] / exp) % 10] - 1] = arr[i];
        count[(arr[i] / exp) % 10]--;
    }

    for (i = 0; i < n; i++)
        arr[i] = output[i];
    delete[] output;
}

void radixSort(int arr[], int n){
    int max = arr[0];
    for (int i = 0; i < n; i++){
        if(arr[i] > max){
            max = arr[i];
        }
    }
    for (unsigned long long i = 1; max / i > 0; i *= 10)
        countingSort(arr, n, i);
}

int main(){

    std::ifstream input ("radixsort.in");
    std::ofstream output ("radixsort.out");

    int a,b,c, n;
    input >> n >> a >> b >>c;

    int *arr = new int [n];
    
    arr[0] = b;
    for(int i = 1; i < n; i ++){
        arr[i] = ((unsigned long long)a * arr[i-1] + b) % c;
    }

    radixSort(arr, n);

    for(int i = 0; i < n; i +=10){
        output << arr[i]<< ' ';
    }
    output << '\n';

    return 0;
}