SDUT-3403

来源:互联网 发布:四大文明古国 知乎 编辑:程序博客网 时间:2024/06/05 06:27

代码:

#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位置,组内排序后是这五个位置上的数从大到小的!!!