0
点赞
收藏
分享

微信扫一扫

【4月第四周学习记录】数据结构与算法王卓-第八章排序-插入排序(直接插入排序,希尔排序)

静守幸福 2022-04-25 阅读 31

目录

0. 排序方法分类

1. 直接插入排序

顺序比较法——不使用哨兵

顺序比较法——使用哨兵

伪代码

性能分析 

顺序比较法——使用哨兵,使用折半查找

伪代码

性能分析

2. 希尔排序

思路

伪代码

性能分析

3. 总结表


0. 排序方法分类

按存储介质分

按比较器个数分

按比较时主要操作分

按是否需要辅助空间

按排序稳定性分

按排序的自然性分

接下来的排序都建立在顺序存储结构的基础上,定义如下:

1. 直接插入排序

类似抓一张牌,排一次序,边插入边排序 

不断重复以下操作: 

插入排序根据插入位置的定位方法,可以分为多种: 

顺序比较法——不使用哨兵

1. 需要一个额外空间[x]存储元素

2. for每一次循环需要做两次判断

顺序比较法——使用哨兵

伪代码

性能分析 

  • 时间复杂度为O(n²),空间复杂度为O(1);
  • 直接插入属于自然排序,与原始序列顺序有关;
  • 直接插入属于稳定排序

顺序比较法——使用哨兵,使用折半查找

伪代码

性能分析

  • 时间复杂度仍为O(n²),空间复杂度为O(1);
  • 折半插入绝大多数情况性能优于直接顺序插入(减少了比较次数,未减少移动次数),原序列的有序性越强,越适合用直接插入;
  • 折半插入属于非自然排序,仅与序列元素个数有关;
  • 折半插入属于稳定排序

2. 希尔排序

思路

例:

伪代码

和普通直接插入排序很相似,但比较间隔由“1”改为了步长“dk”。

特点

性能分析

  • 时间复杂度为O(n的1.25次方左右),空间复杂度为O(1);
  • 增量序列中,其它数不能有除了1以外的公因子(不然会破坏其它数已经排好的序列);
  • 不宜在链式存储结构上使用
  • 希尔排序属于自然排序
  • 希尔排序属于不稳定排序

时间效率与增量序列的选择直接相关,但具体是多少数学上还没有证明,只有猜想值。

3. 总结表

举报

相关推荐

0 条评论