Cod sursa(job #3265462)

Utilizator ShokapKaplonyi Akos Shokap Data 30 decembrie 2024 13:35:23
Problema Radix Sort Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.1 kb
#include <iostream>
#include <fstream>

void countingSort (int arr[], int n, int exp){
    int output[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];
}

void radixSort(int arr[], int n){
    int max;
    for (int i = 0; i < n; i++){
        if(arr[i] > max){
            max = arr[i];
        }
    }
    for (int 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[n];
    
    arr[0] = b;
    for(int i = 1; i < n; i ++){
        arr[i] = (a * arr[i-1] + b) % c;
    }

    radixSort(arr, n);

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

    return 0;
}