希尔排序深入解读

希尔排序是一种改进的插入排序,通过设置不同的增量序列减少插入排序的时间复杂度。文章介绍了希尔排序的基本思想、过程、效率优化以及增量序列的影响,探讨了如何通过选择互质的增量序列提高排序效率。
摘要由CSDN通过智能技术生成

首先希尔排序是对插入排序的改进。

插入排序最坏情况需要O(n^2)的运行时间,如何缩短这一运行时间呢?我们利用插入排序的这样一条性质:当逆序元素的间距均不超过k时,插入排序仅需O(kn)的运行时间。

希尔排序的思想:所以希尔排序首先要做的是让序列中逆序元素间距小于等于某个较小的k,之后再用插入排序在O(kn)的时间完成所有的排序。

希尔排序的过程:

设序列为X,共有n个元素,用长度位n的数组存放。我们要对它做升序排序。

1. 取一个较大的k,将所有位于原序列1,k+1,2k+1,...位置的元素编作一组,将位于2,k+2,2k+2,3k+3,...的元素编作一,依此类推。易知,这样的组一共有n/k组,每组有k个元素。

2. 对每一组进行插入排序。

1、2两步操作合起来称为一趟希尔排序

完成这样一趟希尔排序就能使得逆序元素间距小于等于k吗?

答案是不能。假设有这样一个序列X,我们对它做了k = 2的一趟希尔排序,排序结果是{5,1,6,2,7,3,8,4,9},显然逆序元素4和5之间的距离就超过了2。

虽然完成这样一趟希尔排序不能使得逆序元素间距小于等于k,但我们知道,k越小,系列的有序程度就越高,如果我们为每趟希尔排序合理得安排一个k值(一般是越来越小得),就能使得序列以较小的代价,逐渐趋于有序,直至完全有序。

怎样使得逆序元素间距小于等于k呢?

<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值