20230407 10.2. 表排序

发布时间 2023-06-21 16:27:27作者: 流星<。)#)))≦

间接排序

  • 表排序适用于排列复杂结构的实体
  • 表排序不移动实体,只移动指向实体的指针,也就是 间接排序
    • 定义一个指针数组作为“表”(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元素的复制时间