数据结构和算法——表排序(算法概述、物理排序、复杂度分析,包含详细清晰图示过程)

目录

算法概述

物理排序

复杂度分析


算法概述

表排序用于 待排元素都为一个庞大的结构,而不是一个简单的数字,例如:一本书,一部电影等等。

如果这些待排元素都用之前的排序方法,元素需要频繁互换,那么移动这些元素的时间将会非常长久,效率很低。

在表排序的过程中,实际上是不需要移动那些原始数据的,要移动的只是指向他们位置的那些指针。

不移动元素本身,而只移动元素本身的排序方法,我们称之为"间接排序"。


  • 定义一个指针数组作为"表"(table)

|-----------|-----------|-----------|-----------|-----------|-----------|
| A | 0 | 1 | 2 | 3 | 4 |
| key | e | a | c | b | d |
| table | 0 | 1 | 2 | 3 | 4 |

结合插入排序来看一下表排序的间接排序 :

|-----------|-----------|-----------|-----------|-----------|-----------|
| A | 0 | 1 | 2 | 3 | 4 |
| key | e | a | c | b | d |
| table | 1 | 0 | 2 | 3 | 4 |

比较e和a,发现a比e小,所以a应该要插入到e的前面。但是我们不直接交换元素,而是交换table。

插入c,并与前面的a和e作比较,按照一般的插入排序来看,应该是这样的:

所以就可以直观地看出c应该放在哪个位置了,所以这一趟表排序的结果为:

|-----------|-----------|-----------|-----------|-----------|-----------|
| A | 0 | 1 | 2 | 3 | 4 |
| key | e | a | c | b | d |
| table | 1 | 2 | 0 | 3 | 4 |

接下来重复操作,插入b,对应正常的插入排序为:

表排序的结果为:

|-----------|-----------|-----------|-----------|-----------|-----------|
| A | 0 | 1 | 2 | 3 | 4 |
| key | e | a | c | b | d |
| table | 1 | 3 | 2 | 0 | 4 |

最后插入d,得到最终表排序间接排序的结果:

|-----------|-----------|-----------|-----------|-----------|-----------|
| A | 0 | 1 | 2 | 3 | 4 |
| key | e | a | c | b | d |
| table | 1 | 3 | 2 | 4 | 0 |

这样就得到了一个有序的序列了,即A 0 = A table\[0 ] = a , A 1 = A table\[1 ] = b......

如果仅要求按顺序输出,则可以输出:

A table\[0 ],A table\[1 ],A table\[2 ],......,A table\[N-1 ]

物理排序

如果完成了表排序的间接排序之后,仍然需要对原始数据进行移动排序的话,就要用到物理排序了。

而物理排序用到了一个很重要的原理:N个数字的排列由若干个独立的环组成。

我们依据上面的例子,

|-----------|-----------|-----------|-----------|-----------|-----------|
| A | 0 | 1 | 2 | 3 | 4 |
| key | e | a | c | b | d |
| table | 1 | 3 | 2 | 4 | 0 |

找出它的环:

如此,table1 3 4 0为一个环;2则单独为一个环。

于是现在就可以开始我们的物理排序了:

复杂度分析

  • 最好情况:初始即有序
  • 最坏情况:
  • 有 N/2 个环,每个环包含2个元素
  • 需要 3N/2 次元素移动 (3N是指交换两个需要三次的移动操作)

,m 是每个A元素的复制时间,这个复制时间一般是比较大的常数,不能省略。


end


学习自:MOOC数据结构------陈越、何钦铭

相关推荐
Doubbbbbbble云2 分钟前
图算法中的剪枝技术与启发式优化分析4
算法·机器学习·剪枝
鶴哥只手遮天4 分钟前
CFL3D深度解析:NASA经典CFD求解器的架构、算法与工程实践
算法
维克兜率天6 分钟前
【维克】价差交易实战:配对交易的核心参数设置
大数据·笔记·算法·量化
dtq04246 分钟前
数据结构 - 树的概念
c语言·数据结构·学习·算法
晒太羊的猫7 分钟前
hot100多维动态规划刷题
算法·动态规划
Seraphina3610 分钟前
SQL注入(一)
数据库·经验分享·笔记·sql·网络安全
Dream it possible!12 分钟前
LeetCode_热题100_知识点总结
算法·leetcode·职场和发展
鶴哥只手遮天12 分钟前
从像素到战场:红外场景仿真引擎的核心技术深度解析
算法
anew___14 分钟前
《从零手写操作系统 (19):Ext2文件系统实战——从内存到磁盘的跨越》
java·服务器·前端·数据库·算法
盘古开天166617 分钟前
PPO算法原理详解(上):从策略梯度到近端策略优化的演进之路
人工智能·算法·机器学习·强化学习·ppo