Cod sursa(job #2862353)

Utilizator Cris.CristinaPopescu Cristina Cris.Cristina Data 5 martie 2022 12:08:45
Problema Sortare prin comparare Scor 80
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.63 kb
#include<iostream>
#include<fstream>
#include<algorithm>
using namespace std;
/*
int cmp(const int &a, const int &b) ///sortare descrescatoare
{
    return a>b;
}
*/
int Maxim(long v[], long n)
{
    long max=v[0];
    for(long i=1;i<n;i++)
        if(v[i]>max)
            max=v[i];
    return max;
}
void CountSort(long v[], long n, long div)
{
    long output[n],i,frecv[10];
    //initializam frecv
    for(i=0;i<10;i++)
        frecv[i]=0;
    //calc frecv cifrelor de pe poz div
    for(i=0;i<n;i++)
        frecv[(v[i]/div)%10]++;
    for(i=1;i<10;i++)
        frecv[i]+=frecv[i-1];
    for(i=n-1;i>=0;i--)
    {
        output[frecv[(v[i]/div)%10]-1]=v[i];
        frecv[(v[i]/div)%10]--;
    }
    for(i=0;i<n;i++)
        v[i]=output[i];
}
void RadixSort(long v[],long n)
{
    long m=Maxim(v,n);
    for(long div=1;m/div>0;div*=10)
        CountSort(v,n,div);

}
int main()
{
    ifstream f("algsort.in");
    ofstream g("algsort.out");
    long n;
    ///sortare perechi
    /*pair <int,int> v[1000];
    f>>n;
    for(int i=1;i<=n;i++)
        f>>v[i].first>>v[i].second;
    sort(v+1,v+n+1);
    */
    f>>n;
    long v[n];
    for(long i=0;i<n;i++)
        f>>v[i];
    /*for(int i=1;i<=n;i++)
        g<<v[i].first<<" "<<v[i].second<<endl;
        */
    RadixSort(v,n);
    for(long i=0;i<n;i++)
        g<<v[i]<<" ";
    f.close();
    g.close();
    return 0;



   /* long n, v[500000];
    f>>n;
    for(int i=1;i<=n;i++)
        f>>v[i];
    sort(v+1,v+n+1,cmp);
    for(int i=1;i<=n;i++)
        g<<v[i]<<" ";
    f.close();
    g.close();
    return 0;
    */
}