Shell插入排序(c语言版)

#include <stdio.h>
#include <stdlib.h>
#define M 30
/*算法思想:
    对数据进行按一定规则不断分组,在每一组利用直接插入排序进行排序的基础上,实现Shell插入排序;
    具体操作:
    对n个数据进行排序,首先取1个正整数d<n,将这n个数记录分为d组,即每相距为d的数据为一组;
    然后对这组数据进行直接插入排序,不断进行这个操作直至d=1结束
*/

/*Shell插入排序函数:比直接插入排序效率高*/
void shellinsertsort(int a[],int len) /*对len 个数据进行希尔插入排序*/
{
    int d,i,j,t;
    for(d=len/2;d>=1;d=d/2) /*d的取法多种多样*/
    {
        for(i=(0+d);i<len;i++){
                t=a[i];
            for(j=i-d;j>=0&&a[j]>t;j=j-d){
                a[j+d]=a[j];
            }
            a[j+d]=t;
        }/*当d=1时,同直接插入排序一样*/
    }

}

/*输出结果函数*/

void print(int a[],int len)
{   printf("希尔插入排序:\n");
    int i;
    for(i=0;i<len;i++)
    {
        printf("%d ",a[i]);
    }
}
int main()
{
    int x,a[M],i=0,len;
    printf("Input numbers end by -1:\n");
    scanf("%d",&x);
    while(x!=-1)
    {
        a[i]=x;i++;scanf("%d",&x);
    }
    len=i;
    shellinsertsort(a,len);
    print(a,len);
    return 0;

}

/*执行结果如图:*/


  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值