希尔排序

    希尔排序(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 


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值