SDUT-3403

代码:

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值