代码:
#include<bits/stdc++.h>
using namespace std;
int a[10001],b[10001];
void shell(int n)
{
int i,j,d;
int tmp;
d=n/2;
while(d>0)
{
for(i=d;i<n;i++)
{
tmp=a[i];
j=i-d;
while(j>=0&&tmp<a[j])
{
a[j+d]=a[j];
j=j-d;
}
a[j+d]=tmp;
}
if(d==n/2)
{
for(i=0;i<n;i++)
b[i]=a[i];
}
d=d/2;
}
}
int main()
{
int n,i;
while(cin>>n)
{
for(i=0;i<n;i++)
cin>>a[i];
shell(n);
for(i=0;i<n-1;i++)
cout<<b[i]<<' ';
cout<<b[i]<<endl;
for(i=0;i<n-1;i++)
cout<<a[i]<<' ';
cout<<a[i]<<endl;
}
return 0;
}
我想变成一株蒟蒻,天天晒晒太阳多好
;今天看到政治哲学家马歇尔·伯曼的一段话,写出来以激励在低谷时的人们!
在这个世界上,稳定只能意味着熵,意味着缓慢死亡,而我们的进步感和成长感,是我们确信自己活着的唯一方式!
啊~,回归正题;这个题其实就是希尔排序呀,希尔排序怎么想,就是不断分组(组的大小逐渐缩小到1),然后在组内进行直接插入排序,然而排序后的序列虽然是从大到小的,但是序列位置不会变;比如1位置、3位置、5位置、7位置和9位置,组内排序后是这五个位置上的数从大到小的!!!