Cod sursa(job #1655281)

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

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

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

void countSort(int exp) {
    int i;
    queue<int> qu[1000];

    for(int i = 0; i < n; i++)
        qu[(arr[i]/exp)%1000].push(arr[i]);

    int cnt = 0;

    for(int i = 0; i < 1000; i++) {

        while(!qu[i].empty()) {

            arr[cnt++] = qu[i].front();
            qu[i].pop();

        }

    }

}

void radixsort() {

    int m = mx;

    for (int exp = 1; m/exp > 0; exp *= 1000)
        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;
}