Pagini recente » Cod sursa (job #3275837) | Cod sursa (job #2766510) | Cod sursa (job #1790110) | Cod sursa (job #2688326) | Cod sursa (job #2049100)
#include <iostream>
#include <fstream>
#include <cstring>
#include <vector>
#include <algorithm>
#include <queue>
using namespace std;
ifstream in("algsort.in");
ofstream out("algsort.out");
#define ll long long
#define ull unsigned long long
#define pb push_back
#define mp make_pair
const int NMax = 1e7 + 5;
const int inf = 1e9 + 5;
// solutie cu algoritmul Radix Sort pe cifre;
int N;
int v[NMax];
void radixSort(int);
int main() {
in>>N;
for (int i=1;i <= N;++i) {
in>>v[i];
}
int pw = 1;
for (int i=1;i <= 10;++i) {
radixSort(pw);
pw *= 10;
}
for (int i=1;i <= N;++i) {
out<<v[i]<<' ';
}
in.close();out.close();
return 0;
}
// radixSort(pw) - face o sortare dupa a i-a cifra a fiecarui numar,
// unde i este un numar natural astfel incat 10^(i-1) = pw;
void radixSort(int pw) {
queue<int> Q[10 + 5];
// cate o coada pentru fiecare cifra de la 0 la 9;
for (int i=1;i <= N;++i) {
int digit = v[i]/pw % 10;
// digit - a i-a cifra a numarului;
Q[digit].push(v[i]);
}
// multimile de numere ordonate din cozi se concateneaza si se obtine un vector
// care are o ordonare dupa primele i cifre ale numerelor;
int dim = 0;
for (int i=0;i <= 9;++i) {
while (Q[i].size()) {
v[++dim] = Q[i].front();
Q[i].pop();
}
}
}