Pagini recente » Cod sursa (job #1370560) | Cod sursa (job #2130475) | Cod sursa (job #39382) | Cod sursa (job #652739) | Cod sursa (job #1120501)
#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;
}