一年三百六十五天天天码代码
还没想好怎么接
第三卷——主讲排序和查找。
排序(Sorting)
排序的某些重要应用:
1.解决“一起性”的问题,即把具有相同标志的所有项目连在一起。
2.匹配在两个或多个文件中的项。
3.通过键码查找信息。
排序简介
For instance, N个记录,每个记录
Rj
有一个键码
Kj
。排序过程中记录中只有键码其作用,记录中其他信息对排序没有任何影响,所以也可以说键码支配着整个排序过程。
在键码上确定一个次序关系“<”,则会确定一个排序规则,也确定了排序的目标——记录以键码非递减的次序来排序,如下:
最终获得一个排列
p(1),p(2),...,p(N)
,正好以非递减的次序排列了它们的键码:
Kp(1)≤Kp(2)≤...≤Kp(N)
。
排序是稳定的,即具有相同键码的记录保留它们原来的相对次序不变。(针对键码相同的记录)
For example,原来是:
| 原1 | 原2 | 原3 | 原4 |
|---|---|---|---|
| 8 | 5 | 3 | 5 |
那么排完后应该是:(排序后序列 p(1),p(2),...,p(N) 对应的原2依旧在原4前,排序是稳定的)
| p(1) | p(2) | p(3) | p(4) |
|---|---|---|---|
| 原3 | 原2 | 原4 | 原1 |
| 3 | 5 | 5 | 8 |
而不是:
| p(1) | p(2) | p(3) | p(4) |
|---|---|---|---|
| 原3 | 原4 | 原2 | 原1 |
| 3 | 5 | 5 | 8 |
排序的组合性质
反序
-
简单定义:
- 设 a1,a2,...an 是集合 1,2,...,n 的一个排序,如果 i<j ,且 ai>aj ,则对偶 (ai,aj) 称为一个反序。
For example,
3,1,4,2
有三个反序:
(3,1),(3,2),(4,2)
。其中,1的反序
(3,1)
,2的反序
(3,2),(4,2)
,3,4没有反序。
再For example,排列
5,9,1,8,2,6,4,7,3
1的反序
b1=2
,有两个反序:
(5,1),(9,1)
2的反序
b2=3
,有三个反序:
(5,2),(9,2),(8,2)
同理可以算出
b3=6,b4=4,b5=0,b6=2,b7=2,b8=1,b9=0
通过反序表,我们可以重新构造这个序列:(先放9)
先写下数字9,得到序列:
因为
因为 b7=2 ,所以7前面有两个比它大的数字,才能形成两个反序,得到序列:
因为 b6=2 ,所以6前面只有两个比它大的数字,才能形成只两个反序,得到序列:
因为 b5=0 ,所以5前面没有比它大的数字,得到序列:
后面类似做插入操作,可得到原序列:
本文介绍了排序算法的基本概念及其重要应用,包括解决“一起性”问题、匹配文件中的项及通过键码查找信息等。文中详细解释了排序的过程、稳定性的含义,并通过实例展示了如何利用反序的概念重构序列。

313

被折叠的 条评论
为什么被折叠?



