Pagini recente » Borderou de evaluare (job #2080334) | Cod sursa (job #575276) | Cod sursa (job #1988920) | Borderou de evaluare (job #2782893) | Cod sursa (job #2900160)
#include <iostream>
#include <fstream>
#include <vector>
#include <map>
using namespace std;
int v[10000000];
void mergeSort(int st, int dr){
int m=(st+dr)/2;
if(st<dr){
mergeSort(st, m);
mergeSort(m+1, dr);
}
int i=st, j=m+1, k=0, t[dr-st+1];
while(i<=m && j<=dr) {
if (v[i] < v[j]) t[k++] = v[i++];
else t[k++] = v[j++];
}
while(i<=m) t[k++] = v[i++];
while(j<=dr) t[k++] = v[j++];
k=0;
for(i=st; i<=dr; i++)
v[i] = t[k++];
}
void pb1(){
ifstream fin("algsort.in");
ofstream fout("algsort.out");
int n;
fin>>n;
for(int i=0;i<n;i++) fin>>v[i];
mergeSort(0,n-1);
for(int i=0;i<n;i++) fout<<v[i]<<' ';
}
int main() {
ifstream fin("radixsort.in");
ofstream fout("radixsort.out");
int n, a, b, c;
fin>>n>>a>>b>>c;
v[0] = b;
for(int i=1;i<n;i++)
v[i] = (a * v[i-1] + b) % c;
int check=1, p=10;
map<int, vector<int>> buckets;
map<int, vector<int>> buckets_old;
for(int i=0;i<n;i++){
buckets_old[v[i]%10].push_back(v[i]);
}
while(check){
check = 0;
for(int i=0;i<10;i++){
for(auto x: buckets_old[i])
buckets[x/p%10].push_back(x);
}
if(buckets.size()>1) check=1;
buckets_old = buckets;
buckets.clear();
p*=10;
}
for(int i=0;i<buckets_old[0].size(); i+=10) fout<<buckets_old[0][i]<<' ';
return 0;
}