Cod sursa(job #1019480)

Utilizator Emanuel9Dumitru Emanuel Cristian Emanuel9 Data 31 octombrie 2013 10:00:06
Problema Sortare prin comparare Scor 40
Compilator c Status done
Runda Arhiva educationala Marime 1.13 kb
#include "stdio.h"
#include "stdlib.h"

#define max_nr_elements 50000


void Afiseaza(int *v,int n){
    int i;
    for(i=0;i<n;i++)
        printf("%d ",v[i]);
    printf("\n");

}

void Citeste(int *v,int *n){

    int i;
    for(i=0;i<*n;i++)
    {
        //printf("V[%d]=",i);
        scanf("%d",&v[i]);
    }

}

void RadixSort(int *v,int n){
    int i;
    int b[max_nr_elements];
    int m=0,exp=1;
    for(i=0;i<n;i++){
        if(v[i]>m)
            m=v[i];

    }

    while(m/exp > 0){
        int bucket[10]={0};
        for(i=0;i<n;i++)
            bucket[v[i]/exp%10]++;
        for(i=1;i<10;i++)
            bucket[i]+=bucket[i-1];
        for(i=n-1;i>=0;i--)
            b[--bucket[v[i]/exp % 10]] = v[i];
        for(i=0;i<n;i++)
            v[i]=b[i];
        exp*=10;

       // printf("Pas: ");Afiseaza(v,n);

    }
}
int main()
{

    freopen("algsort.in","r",stdin);
    freopen("algsort.out","w",stdout);
    int v[max_nr_elements],n;
    int i;
    //printf("Dati n: ");
    scanf("%d",&n);
    Citeste(v,&n);
    RadixSort(&v[0],n);
    Afiseaza(v,n);
    return 0;
}