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]

后续轮次

继续交替奇偶阶段,直到没有交换发生为止。

图示示例:

Odd-Even Transposition Sort 示例


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 是一个非常不错的起点。


原始标题:Odd-Even Transposition Sort