插入排序(C语言)-希尔排序(缩小增量法)

本文介绍了希尔排序算法,一种改进后的插入排序方法,适用于中等规模数据集。通过将数据分割成多个子文件并分别进行直接插入排序,最终实现整体排序。文章提供了一个C语言实现示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

希尔排序是希尔(Donald Shell)于1959年提出的一种排序算法。希尔排序也是一种插入排序,它是简单插入排序经过改进之后的一个更高效的版本,也称为缩小增量排序,适合于数据量中等大小的排序(成千上万的数据量),同时该算法是冲破O(n^2)的第一批算法之一。


基本思想:分割成若干个较小的子文件,对各个子文件分别进行直接插入排序,当文件达到基本有序时,再对整个文件进行一次直接插入排序。

           

///希尔排序
///by HZQRomon

#include<stdio.h>
#define m 1000

void ShellSort(int *num, int n)
{
    int increment = 1;  //增量取值没有统一标准,必须小于待排序元素的个数,且最后一趟排序增量要为1
    int i,j,temp;
    for(increment = n/2; increment > 0; increment /= 2)  //增量最后递减至1
    {
        for(i = increment; i < n; i++)
        {
            temp = num[i];
            for(j = i-increment; j >= 0 && temp < num[j]; j -= increment)
            {
                num[j + increment] = num[j];
            }
            num[j + increment] = temp;
        }
    }
}

int main()
{
    int n,i;
    int a[m];
    while(scanf("%d",&n)!=EOF)
    {
        int key = 0;
        for(i = 0; i < n; i++)
        {
            scanf("%d",&a[i]);
        }
        ShellSort(a,n);
        for(i = 0; i < n; i++)
        {
            printf("%d%c",a[i],i==(n-1)?'\n':' ');
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值