Cod sursa(job #2677325)

Utilizator Antonia_onisoruantonia onisoru Antonia_onisoru Data 26 noiembrie 2020 11:28:49
Problema Sortare prin comparare Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.96 kb
#include <iostream>
#include <fstream>
#include <algorithm>
#include <vector>

using namespace std;

ifstream in("algsort.in");
ofstream out("algsort.out");

const int MAXN = 500000;
const int NO_VALUES = 1 << 31;
const int NO_BUKETS = 1 << 16;
const int VALUES_BUKET = 1 << 15;
const int VALUES_BITS = 15;

int v[MAXN], a[MAXN];
int ind[NO_BUKETS], freq[NO_BUKETS];

int getBuketNum( int val ){
  return val >> VALUES_BITS;
}

int main()
{
    int n, i;
    in>>n;
    for( i = 0; i < n; i++ )
      in>>v[i];

    for( i = 0; i < n; i++ )
      freq[getBuketNum(v[i])]++;

    for( i = 1; i < NO_BUKETS ; i++ )
      ind[i] = ind[ i - 1 ] + freq[i - 1];

    for( i = 0; i < n; i++ )
      a[ind[getBuketNum(v[i])]++] = v[i];

    sort(a, a + freq[0]);
    for( i = 1; i < NO_BUKETS; i++ ){
      freq[i] += freq[i - 1];
      sort(a + freq[i - 1], a + freq[i]);
    }

    for( i = 0; i < n; i++ )
      out<<a[i]<<" ";
    return 0;
}