当前课程知识点:数据结构(下) > 第十二章 排序 > (c2)希尔排序:逆序对 > 12c2-2: 定理K
回到排序问题
我们首先来引入h-sorting
以及h-ordered的这两个概念
在某个序列中
如果任何一对距离为H的元素
都保持前小后大的次序
我们就称它为h-ordered
也就是以H为间隔是有序的
当然作为其中的一个特例
在任何一个one ordered的序列中
根据定义任何一对相邻的元素
彼此之间都是顺序的
你应该记得我们在最初介绍
起泡排序算法时就指出
某个序列中只要任何相邻的元素之间
都是彼此顺序的
那么必然就是整体有序的
所以我们说任何one-ordered的序列
也必然是全局有序的
也就是我们排序算法
最初需要输出的结果
那么对于任何一个随机序列
如何使它变成是H-ordered的呢
实际上如这幅图所示
我们只需采用希尔排序的那种方法
将输入的(一维)序列
在逻辑上转换为一个
宽度为H的矩阵
然后分别的逐列排序
你应该记得将整个序列
在逻辑上转化为一个
宽度为H的矩阵
并且逐列进行排序
在希尔排序中就称为h-sorting
由此我们可做一简洁的归纳
也就是任何一个序列
在做过h-sorting之后
必然是h-ordered
你应该记得在希尔排序中
每向前迭代一步
对应的矩阵宽度都会相应的减少
比如从前一轮的g减少为后一轮的h
我们知道在经过前一轮的逐列排序之后
整个序列应该是g-ordered
而在后一轮的逐列排序之后
这个序列也自然的应该是h-ordered
那么在整个序列达到
以h为间隔有序的同时
此前以g为间隔的有序性
是否能够依然得以延续呢
这个问题的答案
并不是那么一目了然
所幸的是Knuth
已经在他那本著名的专著中
给出了正面的答案
Knuth指出任何一个原先
已是g-ordered的序列
在此后经过h-sorting之后
依然保持是g-ordered
也就是说相对于任何一个
固定间隔而言的有序性
在希尔排序的过程中
将会不断的保持
并且持续的积累下来
这个定理的证明
需要颇费一些时间
如果你对此感兴趣
不妨在课后去参考我们的习题解析
-选课之前
--写在选课之前
--宣传片
-考核方式
--考核方式
-OJ系统说明
--关于OJ
--1-注册与登录
--2-界面与选课
--3-提交测试
-关于课程教材与讲义
--课程教材与讲义
-关于讨论区
--关于讨论区
-微信平台
--html
-PA晋级申请
--PA晋级
-(a)概述
--07A-1 纵览
--07A-5 接口
-(a)概述--作业
-(b1)BST:查找
-第七章 二叉搜索树--(b1)BST:查找
-(b2)BST:插入
-(b2)BST:插入--作业
-(b3)BST:删除
-第七章 二叉搜索树--(b3)BST:删除
-(c)平衡与等价
-(c)平衡与等价--作业
-(d1)AVL树:重平衡
-第七章 二叉搜索树--(d1)AVL树:重平衡
-(d2)AVL树:插入
-(d2)AVL树:插入--作业
-(d3)AVL树:删除
-(d3)AVL树:删除--作业
-(d4)AVL树:(3+4)-重构
-(d4)AVL树:(3+4)-重构--作业
-本章测验
--章节测验
-(a1)伸展树:逐层伸展
--习题
-(a2)伸展树:双层伸展
--习题
-(a3)伸展树:算法实现
--习题
-(b1)B-树:动机
--习题
-(b2)B-树:结构
--习题
-(b3)B-树:查找
--习题
-(b4)B-树: 插入
--习题
-(b5)B-树: 删除
--习题
-(xa1)红黑树:动机
--习题
-(xa2)红黑树:结构
--习题
-(xa3)红黑树:插入
--习题
-(xa4)红黑树:删除
-本章测验
--习题
-(b)散列:原理
--09B-3 数组
--09B-4 原理
--09B-5 散列
--09B-6 冲突
--习题
-(c)散列:散列函数
--习题
-(d1)散列:排解冲突(1)
--习题
-(d2)散列:排解冲突(2)
--习题
-(e)桶/计数排序
--习题
-本章测验
--本章测试
-(a1)需求与动机
--习题
-(a2)基本实现
--习题
-(b1)完全二叉堆:结构
--习题
-(b2)完全二叉堆:插入与上滤
--习题
-(b3)完全二叉堆:删除与下滤
--习题
-(b4)完全二叉堆:批量建堆
--习题
-(c)堆排序
--习题
-(xa1)左式堆:结构
--习题
-(xa2)左式堆:合并
--习题
-(xa3)左式堆:插入与删除
-本章测验
--本章测试
-(a)ADT
--习题
-(b1)串匹配
--习题
-(b2)蛮力匹配
--习题
-(c1)KMP算法:从记忆力到预知力
--习题
-(c2)KMP算法:查询表
--习题
-(c3)KMP算法:理解next[]表
--习题
-(c4)KMP算法:构造next[]表
--习题
-(c5)KMP算法:分摊分析
--习题
-(c6)KMP算法:再改进
-(d1)BM_BC算法:以终为始
-(d2)BM_BC算法:坏字符
-(d3)BM_BC算法:构造bc[]
-(d4)BM_BC算法:性能分析
-(e1)BM_GS算法:好后缀
-(e2)BM_GS算法:构造gs表
-(e3)BM_GS算法:综合性能
-(f1)Karp-Rabin算法:串即是数
-(f2)Karp-Rabin算法:散列
-本章测验
--本章测试
-(a1)快速排序:算法A
-- 12a1-5: 实例
--习题
-(a2)快速排序:性能分析
--习题
-(a4)快速排序:变种
-(b1)选取:众数
-(b3)选取:通用算法
--习题
-(c1) 希尔排序:Shell序列
--习题
-(c2)希尔排序:逆序对
-本章测验
--本章测试