Cod sursa(job #3358316)

Utilizator cristiana_6Dode Cristiana cristiana_6 Data 16 iunie 2026 10:45:18
Problema Sortare prin comparare Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.45 kb
#include <iostream>
using namespace std;

struct node{
    int val;
    node* next;
    node(int v=0): val(v), next(nullptr){}
};

struct coada{
    node* start=nullptr;
    node* finish=nullptr;
};

void push(coada &c, int val){
    if(c.start){
        c.finish->next=new node(val);
        c.finish=c.finish->next;
    }
    else{
        c.start=new node(val);
        c.finish = c.start;
    }
}

void pop(coada &c){
    if(c.start==nullptr) return;
    node* p=c.start;
    c.start=c.start->next;
    if(c.start==nullptr){c.finish=nullptr;}
    delete p;
}

bool empty(coada& c){
    if(c.start==nullptr) return true;
    return false;
}

int front(coada& c){
    if(c.start!=nullptr)
        return c.start->val;
    return 0;
}

int main(){
    int n, x, maxim=-1;
    int v[500000];
    coada c[10];
    cin>>n;

    for(int i=0; i<n; i++){
        cin>>x;
        v[i]=x;
        if(x>maxim) maxim=x;
    }

    int p=1;
    while(p<=maxim){
        for(int i=0; i<n; i++){
            push(c[(v[i]/p)%10],v[i]);
        }
        // golim vectorul
        for(int i=0; i<n; i++) v[i]=0;
        int nr=0;
        for(int i=0; i<10; i++){
            coada& q=c[i];
            while(!empty(q)){
                v[nr]=front(q);
                pop(q);
                nr++;
            }
        }
        p*=10;
    }

    for(int i=0; i<n; i++){
        cout<<v[i]<<' ';
    }

    return 0;
}