6.4 希尔排序SHELLSORT

希尔排序是一种基于插入排序的改进算法,通过设置不同的增量dk将数据分组,然后对每个分组进行插入排序。增量序列delt逐步减少,最终实现整个序列的排序。文中给出了C语言伪代码实现,并通过实例详细解释了希尔排序的过程。
摘要由CSDN通过智能技术生成

希尔排序与归并排序一样,应用数据分组的方法。归并排序是相邻的元素(连续元素)组合为一个分组,希尔排序是相同距离的元素组成一个分组,因此分组中的元素并不相邻。希尔排序又称为缩小增量排序(diminishing increment sort),组成一个分组的元素的距离,增量dk,逐渐减少,增量序列存放在一个数组delt[0..t-1]中,dk=delt[k]。算法将数据组织成dk个数据分组,每一个分组是插入排序,在《计算机程序设计的艺术》中,插入排序被比喻为桥牌选手在理牌,实际上插入排序没有将已排序数据和待排序数据一起组织起来,仅仅将已排序数据组成了一个部分有序的序列,而希尔排序将所有元素组成dk个分组,dk减小,则分组中的元素增加,因此是整体的组织,完成了分组有序。希尔排序中的一个数据分组,i=dk+1,++i,用从后向前的方向,i-dk,进行插入排序。每一个元素i,在排序前,同一个分组的所有前驱元素,已组成了一个部分有序的有序表。

《计算机程序设计的艺术》将排序算法,根据算法原理,分为插入排序,交换排序,选择排序,归并排序,和基数排序。Quicksort是交换排序,最值序列的Heapsort是选择排序。

源程序 

        C语言伪代码

void  Shellinsert(SqList &L, int dk){

         /*对顺序表L作一趟希尔插入排序。数据分组的相邻元素(前后记录位置)的增量是dk,*/

         /*而不是1  */

for(i=dk+1; i<=L.length; &#

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值