Cod sursa(job #2679834)

Utilizator TghicaGhica Tudor Tghica Data 1 decembrie 2020 17:40:50
Problema Radix Sort Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.15 kb
#include <stdio.h>
#include <string.h>
#define NMAXX 10000000
#define MAXBIT 32
#define STEP 8
#define PUT 256

using namespace std;

int n, v[2][NMAXX], f[PUT], poz[PUT];


int main()
{
    FILE *fin, *fout;
    int a, b, c, i, aux, bit, p, p2;
    fin = fopen( "radixsort.in", "r" );
    fout = fopen( "radixsort.out", "w" );
    fscanf( fin, "%d%d%d%d", &n, &a, &b, &c );
    v[0][0] = b;
    for ( i = 1; i < n; i++ ) {
        v[0][i] = ((long long)a * v[0][i - 1] + b) % c;
    }
    p = 0;
    p2 = 1;
    for( bit = 0; bit < MAXBIT; bit += STEP ) {
      memset( f, 0, sizeof(f) );
      for ( i = 0; i < n; i++ ) {
          aux = v[p][i] >> bit & (PUT - 1);
          f[aux]++;
      }
      poz[0] = 0;
      for ( i = 1; i < PUT; i++ ) {
          poz[i] = poz[i - 1] + f[i - 1];
      }
      for ( i = 0; i < n; i++ ) {
          aux = v[p][i] >> bit & (PUT - 1);
          v[p2][poz[aux]] = v[p][i];
          poz[aux]++;
      }
      p2 = p;
      p = ( p + 1 ) % 2;
    }
    for ( i = 0; i < n; i += 10 ) {
        fprintf( fout, "%d ", v[0][i] );
    }
    fclose( fin );
    fclose( fout );
    return 0;
}