Pagini recente » Cod sursa (job #2146999) | Cod sursa (job #1959489) | Cod sursa (job #1480336) | Cod sursa (job #2312672) | Cod sursa (job #2608730)
//
// main.cpp
// radixsort
//
// Created by Eusebiu Rares on 01/05/2020.
// Copyright © 2020 Eusebiu Rares. All rights reserved.
//
#include <iostream>
#include "fstream"
std::fstream in ("radixsort.in", std::ios::in) ;
std::fstream out ("radixsort.out", std::ios::out) ;
const int MV = 1e7 ;
int v[MV + 1] ;
typedef long long i64;
namespace raddix {
const int BITS = 12 ;
const int BASE = 1 << BITS ;
const int BASE_IND = BASE - 1 ;
int nr[BASE + 1] ;
int aux[MV + 1] ;
int poz[BASE + 1] ;
void sort(int vec[], int size, int shift) {
int i ;
for (shift ; shift < 32 ; shift += BITS) {
std::fill(nr, nr + BASE, 0) ;
for (i = 0 ; i < size ; ++ i) {
nr[(vec[i] >> shift) & BASE_IND] ++ ;
}
poz[0] = 0 ;
for (i = 1 ; i < BASE ; ++ i) { poz[i] = poz[i - 1] + nr[i - 1] ; }
for (i = 0 ; i < size ; ++ i) {
aux[poz[(vec[i] >> shift) & BASE_IND] ++] = vec[i] ;
}
for (i = 0 ; i < size ; ++ i) {
vec[i] = aux[i] ;
}
}
}
}
int main(int argc, const char * argv[]) {
int n, A, B, C ; in >> n >> A >> B >> C ;
v[0] = B ;
for (int i = 1 ; i < n ; ++ i) {
v[i] = ((i64)A * (i64)v[i - 1] + (i64)B) % C ;
}
raddix::sort(v, n, 0) ;
for (int i = 0 ; i < n ; i = i + 10) {
out << v[i] << ' ' ;
}
}