Cod sursa(job #1021133)

Utilizator bghimisFMI Ghimis Bogdan bghimis Data 3 noiembrie 2013 12:08:13
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1 kb
#include <fstream>
#include <algorithm>
#include <vector>
using namespace std;

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

int v[500000];
int n;

void insert (vector<int> &v, int poz, int value)
{
  int i = poz - 1;
  while (i >= 0 && v[i] > value)
    {
      v[i + 1] = v[i];
      --i;
    }
  v[i + 1] = value;
}

void insertionSort(vector<int>& v, int n)
{
  for (int i = 1; i < n; ++i)
    insert (v, i, v[i]);
}

int hashf(int x)
{
  return x >> 16;
}

void bucketSort (int *v)
{
  vector<int> buckets[n / 3];

  for (int i = 0; i != n; ++i)
    buckets[hashf(v[i])].push_back(v[i]);

  for (int i = 0; i != n / 3; ++i)
    insertionSort(buckets[i], (int) buckets[i].size());

  for (int i = 0; i != n / 3; ++i)
    {
      for (vector<int>::iterator j = buckets[i].begin(); j != buckets[i].end(); ++j)
	cout << *j << " ";
    }
}

int main()
{
  cin >> n;

  for (int i = 0; i < n; ++i)
    {
      cin >> v[i];
    }

  bucketSort(v);
}