奇偶排序演算法

2021-09-23 21:43:53 字數 1476 閱讀 8823

奇偶排序,或奇偶換位排序,或磚排序,是一種相對簡單的排序演算法,最初發明用於有本地互連的平行計算。這是與冒 泡排序特點類似的一種比較排序。該演算法中,通過比較陣列中相鄰的(奇-偶)位置數字對,如果該奇偶對是錯誤的順序(第乙個大於第二個),則交換。下一步重 復該操作,但針對所有的(偶-奇)位置數字對。如此交替進行下去。

使用奇偶排序法對一列隨機數字進行排序的過程

在平行計算排序中,每個處理器對應處理乙個值,並僅有與左右鄰居的本地互連。所有處理器可同時與鄰居進行比較、交換操作,交替以奇-偶、偶-奇的順序。該演算法由habermann在2023年最初發表並展現了在並行處理上的效率。

該演算法可以有效地延伸到每個處理器擁有多個值的情況。在baudet–stevenson奇偶合併分割槽演算法中,每個處理器在每一步對自己所擁有的子陣列進行排序,然後與鄰居執行合併分割槽或換位合併。

batcher奇偶歸併排序是一種相關但更有效率的排序演算法,採用比較-交換和完美-洗牌操作。

batcher的方法在擁有廣泛互連的平行計算處理器上效率不錯。

舉例:待排陣列[6 2 4 1 5 9]

第一次比較奇數列,奇數列與它的鄰居偶數列比較,如6和2比,4和1比,5和9比

[6 2

4 15 9]

交換後變成

[2 6

1 45 9]

第二次比較偶數列,即6和1比,5和5比

[2 6 1

4 5 9]

交換後變成

[2 1 6

4 5 9]

第三趟又是奇數列,選擇的是2,6,5分別與它們的鄰居列比較

[2 1

6 45 9]

交換後[1 2

4 65 9]

第四趟偶數列

[1 2 4

6 5 9]

一次交換

[1 2 4

5 6 9]

以下表現其單處理器演算法,類似氣泡排序,較為簡單但效率並不特別高。

//

completed on 2014.10.8 12:05

//language: c99

////

//#include#include#includevoid swap(int *a, int *b)

void printarray(int a, int count)

void odd_even_sort(int a, int size)

}for(int i = 0; i < size - 1; i += 2)}}

}int main(void)

; int n = sizeof(a) / sizeof(*a);

odd_even_sort(a, n);

printarray(a, n);

return

0;}

CUDA 演算法之 奇偶排序

我們常用的排序演算法基本上都是單執行緒的,要在cuda運用並行進行排序,就需要新的排序演算法。這篇就介紹cuda適用的排序方法 奇偶排序 odd even sort 它是基於 老朋友 氣泡排序衍生出來的演算法。cuda的演算法複雜度 o n 穩定排序 由於每個 小塊 進行交換的時候都是互不相關的,所...

基礎排序 奇偶排序

奇偶排序,或奇偶換位排序,或磚排序,是一種相對簡單的排序演算法,最初發明用於有本地互連的平行計算。這是與氣泡排序特點類似的一種比較排序。該演算法中,通過比較陣列中相鄰的 奇 偶 位置數字對,如果該奇偶對是錯誤的順序 第乙個大於第二個 則交換。下一步重複該操作,但針對所有的 偶 奇 位置數字對。如此交...

整數奇偶排序

總時間限制 1000ms 記憶體限制 65536kb 描述 給定10個整數的序列,要求對其重新排序。排序要求 1.奇數在前,偶數在後 2.奇數按從大到小排序 3.偶數按從小到大排序。輸入輸入一行,包含10個整數,彼此以乙個空格分開,每個整數的範圍是大於等於0,小於等於100。輸出按照要求排序後輸出一...