1. 简介
Odd-Even Transposition Sort(奇偶转置排序)是 Bubble Sort 的一种变体,属于基于比较的排序算法。它最初是为多处理器系统设计的,当然也可以在单处理器系统中运行。该算法也被称为 Brick Sort 或 Parity Sort。
虽然在单核系统上它的效率和冒泡排序相当,但其设计天然适合并行处理,在多核/多处理器环境下能发挥出更好的性能。
2. Odd-Even Transposition Sort 原理
2.1 核心思想
Odd-Even Transposition Sort 采用 分治策略,通过交替执行两个阶段来排序数组:
- 奇阶段(Odd Phase):对所有奇数索引的元素与其后一个元素进行比较和交换(如果顺序错误)。
- 偶阶段(Even Phase):对所有偶数索引的元素与其后一个元素进行相同操作。
这两个阶段交替执行,直到某一轮中没有发生任何交换,表示数组已经有序,算法结束。
2.2 伪代码实现
algorithm OddEvenTranspositionSort(arr, n):
// INPUT
// arr = 一个未排序的数组
// n = 元素个数
// OUTPUT
// arr = 排序后的数组
sortedFlag <- False
index <- 0
while sortedFlag = False:
sortedFlag <- True
// 奇阶段:处理奇数索引
for index <- 1 to n - 2 by 2:
if arr[index] > arr[index + 1]:
Swap arr[index] and arr[index + 1]
sortedFlag <- False
// 偶阶段:处理偶数索引
for index <- 0 to n - 2 by 2:
if arr[index] > arr[index + 1]:
Swap arr[index] and arr[index + 1]
sortedFlag <- False
return arr
2.3 示例演示
假设输入数组为:
arr = [19, 2, 72, 3, 18, 57, 603, 490, 45, 101]
第一步:奇阶段
- 比较索引 1 与 2、3 与 4、5 与 6、7 与 8:
- 交换 19 和 2 → [2, 19, 72, 3, 18, 57, 603, 490, 45, 101]
- 交换 72 和 3 → [2, 19, 3, 72, 18, 57, 603, 490, 45, 101]
- 交换 603 和 490 → [2, 19, 3, 72, 18, 57, 490, 603, 45, 101]
第二步:偶阶段
- 比较索引 0 与 1、2 与 3、4 与 5、6 与 7、8 与 9:
- 交换 19 和 3 → [2, 3, 19, 72, 18, 57, 490, 603, 45, 101]
- 交换 72 和 18 → [2, 3, 19, 18, 72, 57, 490, 603, 45, 101]
- 交换 603 和 45 → [2, 3, 19, 18, 72, 57, 490, 45, 603, 101]
后续轮次
继续交替奇偶阶段,直到没有交换发生为止。
✅ 图示示例:
3. 时间与空间复杂度分析
时间复杂度
- 单处理器下,Odd-Even Transposition Sort 的时间复杂度为 **O(n²)**。
- 每次奇偶阶段各进行约 n/2 次比较,总共最多 n 次迭代。
空间复杂度
- 原地排序,仅需常数级额外空间:
- 辅助空间复杂度为 **O(1)**(仅使用几个变量)
- 输入数组本身占用 O(n) 空间
⚠️ 注意: 虽然算法本身是 O(1) 额外空间,但若在并行环境中使用,可能需要额外通信开销。
4. 并行化潜力
Odd-Even Transposition Sort 的一大亮点是其 天然适合并行执行。
并行思路
- 将数组划分为多个子数组,每个子数组由一个处理器独立排序。
- 每个处理器执行本地 Odd-Even 排序。
- 最后合并所有子数组,完成整体排序。
优势
- 多处理器环境下,时间复杂度可降至 **O(n/p)**(p 为处理器数量)
- 适合分布式系统、GPU 计算等并行场景
5. 总结
- Odd-Even Transposition Sort 是 Bubble Sort 的改进版,适用于多处理器系统。
- 在单核环境下的性能与冒泡排序相当(O(n²)),但在并行环境下表现更佳。
- 实现简单,适合教学和并行算法入门。
- 适合数据量适中、并行资源充足的应用场景。
✅ 适用场景:
- 教学演示
- 并行计算环境
- GPU 排序算法实现
❌ 不推荐用于:
- 单线程、大数据量排序
- 对性能要求极高的生产环境(建议使用更高效的排序算法如 Quick Sort、Merge Sort)
如果你正在学习并行算法,或者想了解排序算法的并行实现,Odd-Even Transposition Sort 是一个非常不错的起点。