Cod sursa(job #3003898)

Utilizator RobertJmekRobert RobertJmek Data 15 martie 2023 23:50:19
Problema Sortare prin comparare Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.67 kb
#include<iostream>
#include <time.h>
#include<unistd.h>
using namespace std;

int max(int vec[], int n)
{
    int nrMax=vec[0];
    for( int i = 1; i < n; i++ )
    {
        if ( vec[i] > nrMax )
            nrMax = vec[i];
    }

    return nrMax;
}

void Sort(int vec[], int n, int digit)
{
    int finalvec[n];
    int i, count[10] = {0};
    for ( i = 0; i < n; i++)
    {
        count[(vec[i] / digit) % 10]++;
    }
    for ( i = 1; i < 10; i++ )
    {
        count[i] += count[i - 1];
    }
    for ( i = n - 1; i >= 0; i-- )
    {
        finalvec[count[(vec[i] / digit ) % 10] - 1 ] = vec[i];
        count[(vec[i] / digit) % 10 ]--;
    }
    for ( i = 0; i < n; i++)
        vec[i] = finalvec[i];
}

void radix( int vec[], int n)
{
    int ma=max(vec, n);
    for ( int digit = 1; ma / digit > 0; digit *= 10 )
        Sort(vec,n,digit);
}

bool sort_test(int vec[],int n)
{   
    bool ok=true;
    for ( int i=0; i < n-1; i++ )
    {
        if ( vec[i+1] < vec[i] )
            ok = false;
    }
    return ok;
}

int main()
{
    int vec[] = {4,7,43,5534,4,54,5,45,43,46,756,47,6548,67,8678,678,967,8,678,67,8467,8,67,876,84,65,48,47,8467,8,678,67,8,678,674,867,4867,84,78,647,86,78,678,67,867,8,6342,32,32,3,43,4,35,45,3,45,645,65,46,456,54,645,7,658,769,89,87,456,6,5,867,976,87564,645,8,79,6,56,74,856,8,79,8,9867,886,987,97,9,89,879,857,867,9,680,86,987,99,6,98,98,5,78,5,232,6553,221,432,13,45,886,432,4324,5323,43534534,3232};
    int n = sizeof(vec) / sizeof(vec[0]);
    clock_t start = clock();
    radix(vec,n);
    clock_t end = clock();
    double elapsed = double(end - start)/CLOCKS_PER_SEC;
    printf("Time measured: %.9f seconds.\n", elapsed);
    cout<<sort_test(vec,n);
}