Cod sursa(job #2680672)

Utilizator Ana_22Ana Petcu Ana_22 Data 3 decembrie 2020 21:40:39
Problema Sortare prin comparare Scor 60
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.09 kb
#include <stdio.h>
#include <stdlib.h>
#include <vector>
#define NMAX 500000
#define NVAL ( 1 << 31 )
#define NB ( 1 << 16 )
#define VALUES_PER_BUCKET ( 1 << 15 )
#define BITS 15

using namespace std;

int v[NMAX];
vector<int> b[NB];

void sort( int bi ) {
  vector<int>& v = b[bi];
  int u, n, max, p, i;
  n = v.size();
  for( u = n - 1; u > 0; u-- ) {
    max = v[0];
    p = 0;
    for( i = 1; i <= u; i++ )
      if( v[i] > max ) {
        max = v[i];
        p = i;
      }
    v[p] = v[u];
    v[u] = max;
  }
}

int main() {
    FILE *fin, *fout;
    int n, i, j, k;
    fin = fopen( "algsort.in", "r" );
    fscanf( fin, "%d", &n );
    for( i = 0; i < n; i++ ) {
      fscanf( fin, "%d", &v[i] );
      b[v[i]>>BITS].push_back( v[i] );
    }
    fclose( fin );
    n = 0;
    for( i = 0; i < NB; i++ ) {
      sort( i );
      k = b[i].size();
      for( j = 0; j < k; j++ )
        v[n++] = b[i][j];
    }
    fout = fopen( "algsort.out", "w" );
    for( i = 0; i < n; i++ )
      fprintf( fout, "%d ", v[i] );
    fclose( fout );
    return 0;
}