Pagini recente » Cod sursa (job #612421) | Cod sursa (job #2820229) | Cod sursa (job #643987)
Cod sursa(job #643987)
//shellsort 4.12.2011
#include<iostream>
#include<fstream>
using namespace std;
ifstream fin ("algsort.in");
ofstream fout ("algsort.out");
int n,v[500001];
//long nr1=0,nr2=0; //*nr bucle
void shellsort_clasic()
{
for (int gap=n/2;gap>0;gap/=2)
for (int i=gap;i<n;i++)
{
int j=i;
while (j-gap>=0 && v[j]<v[j-gap]) //*nr bucle: ++nr1
{
int aux=v[j];v[j]=v[j-gap];v[j-gap]=aux;//intersch
j=j-gap;
}
}
}
void shellsort_serie()
{
int gaps[16] = { 1391376, 463792, 198768, 86961, 33936,
13776, 4592, 1968, 861, 336,
112, 48, 21, 7, 3, 1 };
for (int k=0;k<16;k++)
if (gaps[k]<n/2+1)
{
int gap=gaps[k];
for (int i=gap;i<n;i++)
{
int j=i;
while (j-gap>=0 && v[j]<v[j-gap]) //*nr bucle: ++nr1
{
int aux=v[j];v[j]=v[j-gap];v[j-gap]=aux;//intersch
j=j-gap;
}
}
}
}
int main ()
{
fin>>n; for (int i=0;i<n;i++) fin>>v[i]; //citire
//shellsort_clasic();
shellsort_serie();
for (int i=0;i<n;i++) fout<<v[i]<<' '; //scriere
//cout<<"\n Nr bucle: "<<nr1<<' '<<nr2; //testing
fin.close();
fout.close();
return 0;
}