Pagini recente » Cod sursa (job #2737767) | Cod sursa (job #1111635) | Cod sursa (job #862030) | Cod sursa (job #1818541) | Cod sursa (job #2237319)
#include <fstream>
#include <bitset>
#include <vector>
///shell-sort
using namespace std;
ifstream f("algsort.in");
ofstream g("algsort.out");
const int N = 500010;
int n,x[N];
bitset<N> gapes;
vector<int> aux;
void heap_down(int,int);
int main()
{
f>>n;
for(int i=0; i<n; i++)
f>>x[i];
for(int i=1; i<=n; i*=2)
aux.push_back(i);
while(aux.size())
{
for(auto it:aux)
gapes[it]=1;
while(aux.size()&&(3*aux.back()>n))
aux.pop_back();
if(aux.size())
for(auto &it:aux)
it*=3;
}
for(int k=n; k>=1; k--)
if(gapes[k])
for (int i = k; i < n; i++)
{
int temp = x[i],j;
for (j = i; j >= k && x[j - k] > temp; j -= k)
{
x[j] = x[j - k];
}
x[j] = temp;
}
for(int i=0; i<n; i++)
g<<x[i]<<' ';
return 0;
}