奇偶排序基本信息

一个奇偶排序或砖排序是一个简单的排序算法,这是与本地互连并行处理器使用而开发的。它通过比较列表中所有奇数/偶数索引的相邻元素对来工作,如果一对错误的顺序,则切换元素。对于偶数/奇数索引对,下一步重复此步骤。然后它在奇数/偶数和偶数/奇数步之间交替,直到列表被排序。

Odd-Even 排序的伪代码:

if n>2 then
    1. apply odd-even merge(n/2) recursively to the even subsequence a0, a2, ..., an-2 and to the odd subsequence a1, a3, , ..., an-1
    2. comparison [i : i+1] for all i element {1, 3, 5, 7, ..., n-3}
else
    comparison [0 : 1]

维基百科有 Odd-Even 排序的最好例证:

https://i.stack.imgur.com/FVktW.gif

奇偶排序示例:

https://i.stack.imgur.com/LZJKu.jpg

执行:

我用 C#语言实现奇偶排序算法。

public class OddEvenSort
{
    private static void SortOddEven(int[] input, int n)
    {
        var sort = false;

        while (!sort)
        {
            sort = true;
            for (var i = 1; i < n - 1; i += 2)
            {
                if (input[i] <= input[i + 1]) continue;
                var temp = input[i];
                input[i] = input[i + 1];
                input[i + 1] = temp;
                sort = false;
            }
            for (var i = 0; i < n - 1; i += 2)
            {
                if (input[i] <= input[i + 1]) continue;
                var temp = input[i];
                input[i] = input[i + 1];
                input[i + 1] = temp;
                sort = false;
            }
        }
    }

    public static int[] Main(int[] input)
    {
        SortOddEven(input, input.Length);
        return input;
    }
}

辅助空间: O(n)
时间复杂度: O(n)