Cod sursa(job #1120501)

Utilizator mihai995mihai995 mihai995 Data 25 februarie 2014 00:59:42
Problema Sortare prin comparare Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 1.2 kb
#include <fstream>
#include <vector>
using namespace std;

const int N = 100005;

vector<int> list[N], v;
int nrL;

ifstream in("algsort.in");
ofstream out("algsort.out");

void insert(int x){
    int ans = -1;
    for (int step = 1 << (31 - __builtin_clz(nrL)) ; step ; step >>= 1)
        if (ans + step < nrL && x < list[ans + step].back())
            ans += step;
    if (ans == nrL - 1)
        ++nrL;
    list[ans + 1].push_back(x);
}

void shitSort(vector<int>& v){
    while (true){
        nrL = 0;
        for (vector<int> :: iterator it = v.begin() ; it != v.end() ; it++)
            insert(*it);
        if (nrL == 1)
            return v.swap( list[0] );
        v.clear();
        for (int i = nrL - 1 ; i >= 0 ; i--){
            for (vector<int> :: iterator it = list[i].begin() ; it != list[i].end() ; it++)
                v.push_back(*it);
            list[i].clear();
        }
    }
}

int main(){
    int n, x;

    in >> n;
    v.reserve(n);
    while (n--){
        in >> x;
        v.push_back(x);
    }
    shitSort(v);
    for (vector<int> :: iterator it = v.begin() ; it != v.end() ; it++)
        out << *it << " ";
    out << "\n";
    return 0;
}