Cod sursa(job #662146)

Utilizator Marius_mFMI-M2 Marius Melemciuc Marius_m Data 15 ianuarie 2012 22:22:40
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.07 kb
#include<stdio.h>
#include<vector>
#define Nmax 500002

using namespace std;

FILE *c,*d;
int a[Nmax],n,cifre_max;


int nr_cifre(int x)
{
	int k=0;
	while(x!=0)
	{
		k++;
		x=x/10;
	}
	return k;
}

void read()
{
	int i,t;
	cifre_max=0;
	fscanf(c,"%d",&n);
	for(i=1;i<=n;i++)
	{
		fscanf(c,"%d",&a[i]);
		t=nr_cifre(a[i]);
		if(t>cifre_max)
			cifre_max=t;
	}
}

int cifra_k(int k,int x)
{
	int i,digit;                                 // returneaza a k a cifra din numarul x
	for(i=1;i<=k;i++)
	{
		digit=x%10;
		x=x/10;
	}
	return digit;
}

void lsd_radix()
{
	int i,j,t,k,l,y;
	for(i=1;i<=cifre_max;i++)
	{
		vector <int> v[10];
		for(j=1;j<=n;j++)
		{
			t=cifra_k(i,a[j]);
			v[t].push_back(a[j]);
		}
		y=0;
		for(k=0;k<=9;k++)
			for(l=0;l<v[k].size();l++)
			{
				y++;
				a[y]=v[k][l];
			}
	}
}

void write()
{
	int i;
	for(i=1;i<=n;i++)
		fprintf(d,"%d ",a[i]);
}

int main()
{
	c=fopen("algsort.in","r");
	d=fopen("algsort.out","w");
	read();
	lsd_radix();
	write();
	fclose(c);
	fclose(d);
	return 0;
}