Cod sursa(job #1015184)

Utilizator miu_mik93FMI - Paduraru Miruna miu_mik93 Data 23 octombrie 2013 23:27:39
Problema Sortare prin comparare Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 1.06 kb
#include <stdio.h>
#include <math.h>
#include <iostream>
#include <string>
#include <stdlib.h>
#include <assert.h>
#define NMax 500001
#define MMax 200000
#include <time.h>
using namespace std;
void radixSort(int *v, int n)
{
	int *b, bucket[10], exp = 1;
	int max = v[0];
	b = new int[n+1];
	//memset(bucket, 0, n+1);
	for (int i = 1; i < n; i++)
	{
		if (v[i] > max)
			max = v[i];
	}
	while (max / exp)
	{
		for (int i=0; i<=9; i++)
			bucket[i] = 0;
		for (int i=0; i<n; i++)
			bucket[(v[i]/exp)%10]++;
		for (int i=1; i<10; i++)
			bucket[i] += bucket[i-1];
		for (int i=n-1; i>=0; i--)
			b[--bucket[(v[i]/exp)%10]] = v[i];
		for (int i=0; i<n; i++)
			v[i] = b[i];
		exp *= 10;
	}
}
int main()
{
    int n, *v;
    FILE *f = fopen("algsort.in", "r");
    FILE *g = fopen("algsort.out", "w");
    fscanf(f, "%d", &n);
	v = new int[n+1];
    for (int i = 0; i < n; i++)
    {
        fscanf(f, "%d", &v[i]);
    }
	radixSort(v, n);
    for (int i = 0; i < n; i++)
		fprintf(g, "%d ", v[i]);
    fclose(f); fclose(g);
    return 0;
}