C++希尔排序

希尔排序是基于插入排序的一种改进算法,通过跳跃分割策略减少元素的移动次数。它首先选择一个增量序列,按照增量将记录分组进行插入排序,逐步缩小增量直到为1,最终实现整个序列基本有序。虽然希尔排序不是稳定的排序算法,但在某些情况下可以达到线性排序的效率。
摘要由CSDN通过智能技术生成

希尔排序的提出:
直接插入排序算法的问题:
若一个最小的值在后面,那么当排这个最小值的时候需要一步步移动,将其移动到序列的最前面,那么有没有什么方法减少这种移位?
我们不希望一步一步移动,而是给它设置一个增量让其大步移动,希尔排序由此产生,同时希尔排序打破了排序算法时间复杂度不能低于 O(n2) O ( n 2 )

希尔排序采用跳跃分割的策略:
将相距某个“增量”的记录组成一个子序列,这样才能保证在子序列内分别进行直接插入排序后的得到的结果基本有序而不是局部有序。

这里简单介绍一下基本有序的概念:小的关键字基本在前面,大的基本在后面,不大不小的基本在中间,像{2,1,,3,6,4,7,5,8,9}就可以称为基本有序,{1,5,9,3,7,8,2,4,6}就不能称为基本有序,因为最大的9在第三位,并且很小的2在导数第三位。

希尔排序是基于插入排序的以下两点性质而提出改进方法的:
1.插入排序在对几乎已经排好序的数据操作时,效率高,即可以达到线性排序的效率。
2.但插入排序一般来说是低效的,因为插入排序每次只能将数据移动一位。

希尔排序的基本思想:
先取小于 n n 的整数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值