Cod sursa(job #2680680)

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

int v1[NMAX], v2[NMAX];
int ind[NB], f[NB];

void sort( int begin, int end ) {
  int p, i, u, max;
  for( u = end - 1; u > begin; u-- ) {
    max = v2[0];
    p = 0;
    for( i = begin + 1; i <= u; i++ )
      if( v2[i] > max ) {
        max = v2[i];
        p = i;
      }
    v2[p] = v2[u];
    v2[u] = max;
  }
}

int main() {
    FILE *fin, *fout;
    int n, i;
    fin = fopen( "algsort.in", "r" );
    fscanf( fin, "%d", &n );
    for( i = 0; i < n; i++ ) {
      fscanf( fin, "%d", &v1[i] );
      f[v1[i]>>BITS]++;
    }
    fclose( fin );
    for( i = 1; i < NB; i++ )
      ind[i] = ind[i-1] + f[i-1];
    for( i = 0; i < n; i++ )
      v2[ind[v1[i]>>BITS]++] = v1[i];
    sort( 0, f[0] );
    for( i = 1; i < NB; i++ ) {
      f[i] += f[i-1];
      sort( f[i-1], f[i] );
    }
    fout = fopen( "algsort.out", "w" );
    for( i = 0; i < n; i++ )
      fprintf( fout, "%d ", v2[i] );
    fclose( fout );
    return 0;
}