Cod sursa(job #1655277)

Utilizator razvandRazvan Dumitru razvand Data 17 martie 2016 21:15:32
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.92 kb
// C++ implementation of Radix Sort
#include <iostream>
#include <fstream>
#include <queue>
#include <string.h>
using namespace std;

ifstream in("algsort.in");
ofstream out("algsort.out");

int mx;
int arr[500003];
int n;
int qu[10][500003];

void countSort(int exp) {
    int i;
    int q[10] = {0};
    int t = 0;

    for(int i = 0; i < n; i++) {
        t = (arr[i]/exp)%10;
        qu[t][q[t]++] = arr[i];
    }

    int cnt = 0;
    for(int i = 0; i < 10; i++)
        for(int j = 0; j < q[i]; j++)
            arr[cnt++] = qu[i][j];

}

void radixsort() {

    int m = mx;

    for (int exp = 1; m/exp > 0; exp *= 10)
        countSort(exp);

}

int main() {
    in >> n;
    for(int i = 0; i < n; i++) {
        in >> arr[i];
        if(arr[i] > mx)
            mx = arr[i];
    }

    radixsort();

    for (int i = 0; i < n; i++)
        out << arr[i] << " ";

    return 0;
}