Cod sursa(job #522785)

Utilizator dudu77tTudor Morar dudu77t Data 16 ianuarie 2011 04:26:46
Problema Sortare prin comparare Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 0.83 kb
#include <iostream>
#include <cstdlib>

using namespace std;

void sort(int *array, int *temp, int size, int level) {
 int i, *index = (int*)calloc(256, sizeof(*index));
 for (i = 0; i < size; ++i)
  ++index[(array[i] >> (level * 8)) & 255];
 for (i = 255; i; --i)
  index[i] = index[i - 1];
 index[0] = 0;
 for (i = 2; i < 256; ++i)
  index[i] += index[i - 1];
 for (i = 0; i < size; ++i)
  temp[index[(array[i] >> (level * 8)) & 255]++] = array[i];
 if (level < 3)
  sort(temp, array, size, level + 1);
}

int main() {
 freopen("algsort.in", "r", stdin);
 freopen("algsort.out", "w", stdout);
 int i, n;
 cin >> n;
 int *array = (int*)malloc(n * sizeof(*array));
 int *temp = (int*)malloc(n * sizeof(*temp));
 for (i = 0; i < n; ++i)
  cin >> array[i];
 sort(array, temp, n, 0);
 for (i = 0; i < n; ++i)
  cout << array[i] << ' ';
 return 0;
}