20230407 10.2. 表排序
间接排序
- 表排序适用于排列复杂结构的实体
- 表排序不移动实体,只移动指向实体的指针,也就是 间接排序
- 定义一个指针数组作为“表”(table)
如果仅要求按顺序输出,则输出:
A[ table[0] ], A[ table[1] ], ……, A[ table[N-1] ]
物理排序
表排序后如果需要把复杂实体也进行排序,就需要物理排序
N个数字的排列由若干个独立的环组成
如何判断属于哪些元素属于一个环?按照数组索引A遍历table,直到构成一个环
将实体进行排序时,只需要在环内互换就可以,例如第一个环中,A[0]应该换为A[3],A[3]换为A[1],A[1]换为A[5],A[5]换为A[0],换完之后,环从 f,d,a,b 变成了 a,b,d,f
如何判断一个环的结束?
if ( table[i] == i )
复杂度分析
- 最好情况:初始即有序
- 最坏情况:
- 有 \(N / 2\) 个环,每个环包含2个元素
- 需要 \(3N / 2\) 次元素移动
\(T = O( m N )\) ,m 是每个A元素的复制时间