希尔排序

本文介绍希尔排序的基本原理及其作为插入排序改进版的特点。希尔排序通过设置不同的增量进行分组排序,逐步减少元素之间的间隔来提高排序效率。

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

    希尔排序(Shell Sort)是插入排序的一种。是针对直接插入排序算法的改进。该方法又称缩小增量排序,因DL.Shell于1959年提出而得名。

原理

    先取一个小于n的整数d1作为第一个增量,把文件的全部记录分组。所有距离为d1的倍数的记录放在同一个组中。先在各组内进行直接插入排序;然后,取第二个增量d2<d1重复上述的分组和排序,直至所取的增量dt=1(dt<dt-l<…<d2<d1),即所有记录放在同一组中进行直接插入排序为止。

希尔排序的一般实现

void shellSort(int list[],int low,int high)
{
	int len = high - low + 1;
	int d = len / 2;
	while (d >= 1)
	{
		for(int i=low+d;i<=high;i++)
		{
			int j = i - d;
			int temp = list[i];
			while(j>=low && list[j]>temp){
				list[j+d] = list[j];
				j = j - d;
			}
			list[j+d] = temp;
		}
		d = d / 2;
	}
}
具体的步长可以有更精细的考虑,这里作为演示性的实现,未作过多考虑。
测试数据与每轮的中间结果:

521 310 72  373 15  546 385 856 187 147 
521 310 72  187 15  546 385 856 373 147 
15  147 72  187 373 310 385 546 521 856 
15  72  147 187 310 373 385 521 546 856 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值