ในทางด้านการคำนวณการจัดเรียงแบบคี่-คู่ ( odd–even sort , odd–even transposition sort ) ยังเป็นที่รู้จักกันในชื่อ brick sort เป็นความสัมพันธ์แบบง่ายๆในการจัดเรียงลำดับข้อมูลแบบขั้นตอนวิธีการ(Sorting Algorithm) เดิมทีถูกพัฒนาเพื่อใช้สำหรับตัวประมวลผลแบบขนาน(parallel processors) กับการเชื่อมต่อในระดับท้องถิ่น(Local) มันเป็นการเรียงลำดับแบบเปรียบเทียบที่มีลักษณะคล้ายกับการเรียงลำดับข้อมูลแบบฟองสบู่ (Bubble sort) ซึ่งมีลักษณะหลายอย่างที่มีความคล้ายกัน โดยมีฟังก์ชันการทำงานเปรียบเทียบจำนวนคี่/คู่ ทั้งหมดที่อยู่ติดกันเข้าจับคู่กันของสมาชิก(Elements)ในรายการ และถ้าการจับคู่อยู่ในลำดับที่ไม่ถูกต้อง (ในครั้งแรกจะขนาดใหญ่กว่าครั้งที่สอง) สมาชิกจะทำการสลับที่กัน ขั้นตอนต่อไปทำซ้ำโดนดูจากสมาชิกที่ติดกัน จากนั้นจะสลับระหว่างขั้นตอนคี่/คู่ และ คู่/คี่ จนกว่ารายการจะถูกจัดเรียงลำดับทั้งหมด

| Class | การจัดเรียงลำดับข้อมูลแบบขั้นตอนวิธีการ |
| --- | --- |
| Data structure | อาเรย์ |
| Worst-case performance | O(n^2) |
| Best-case performance | O(n) |
| Worst-case space complexity | O(1) |

การเรียงลำดับบนอาร์เรย์ของตัวประมวลผล
-------------------------------------

ในตัวประมวลผลแบบขนาน กับค่าหนึ่งค่าต่อหนึ่งตัวประมวลผล และมีเพียงการเชื่อมต่อแบบเพื่อนบ้านทางซ้ายขวาเท่านั้นโปรเซสเซอร์ทั้งหมดพร้อมกันทำการเปรียบเทียบกับเพื่อนบ้านของพวกเขาสลับกันระหว่างการจับคู่แบบคี่และแม้แต่คู่กัน อัลกอริธึมนี้ถูกนำเสนอครั้งแรกและแสดงให้เห็นว่ามีประสิทธิภาพในตัวประมวลผล โดย Habermann ในปี พ. ศ. 2515 อัลกอริธึมจะขยายได้อย่างมีประสิทธิภาพต่อบางกรณีที่มีหลายรายการต่อหนี่งโปรเซสเซอร์ ในอัลกอริธึมการแยกส่วนของจำนวนคี่และคู่ใน Baudet - Stevenson แต่ละตัวประมวลผลทำการเรียงข้อมูลรายการย่อยของตัวมันเองในแต่ละขั้นตอน ใช้อัลกอริทึมการจัดเรียงที่มีประสิทธิภาพ และดำเนินการแยกการผสาน(merge splitting)หรือการขนย้ายแบบผสาน(Transposition-merge) มีการทำงานใกล้สมาชิกใกล้เคียง และมีการจับคู่กันแบบสลับระหว่างจำนวนคี่-คู่ และจำนวนคู่-คี่ ในแต่ละขั้นตอน Batcher's odd–even merge sort ขั้นตอนวิธีการเรียงลำดับที่เกี่ยวข้อง แต่มีประสิทธิภาพมากขึ้นคือ Batcher odd–even merge sort ใช้การเปรียบเทียบการดำเนินงานและการดำเนินการแบบสุ่มสมบูรณ์แบบ วิธี Batcher มีประสิทธิภาพในโปรเซสเซอร์แบบขนานที่มีการเชื่อมต่อในระยะไกล

ตัวอย่างโปรแกรม
---------------

เมื่อใช้วิธีการเรียงลำดับคี่-คู่บนเครื่องที่มีหน่วยประมวลผลเดียว จะมีลักษณะของโปรแกรมคล้ายกับการเรียงลำดับแบบฟอง การทำงานของโปรแกรมนั้นเข้าใจได้ง่าย แต่โปรแกรมมีประสิทธิภาพในการทำงานไม่สูงนัก

โปรแกรมการเรียงลำดับคี่-คู่ที่มีการเรียงลำดับจากน้อยไปหามาก สามารถแสดงในภาษาไพทอนได้ดังตัวอย่างด้านล่าง

```
def oddEvenSort(list):

    def swap(list, i, j):
        temp = list[i];
        list[i] = list[j];
        list[j] = temp;

    issorted = False;

    while not issorted:
        issorted = True;

 """ odd phase """
        for i in range (1,len(list)-1,2):
            if list[i] > list[i+1]:
                swap(list, i, i+1);
                issorted = False;

 """ even phase """
        for i in range (0,len(list)-1,2):
            if list[i] > list[i+1]:
                swap(list, i, i+1);
                issorted = False;

    return list

```

การพิสูจน์ความถูกต้อง
---------------------

Unsorted

[3 2] [3 8] [5 6] [4 1] (oddPhase1)

2 [3 3] [8 5] [6 1] 4 (evenPhase2)

[2 3] [3 5] [8 1] [6 4] (oddPhase3)

2 [3 3] [5 1] [8 4] 6 (evenPhase4)

[2 3] [3 1] [5 4] [8 6] (oddPhase5)

2 [3 1] [3 4] [5 6] 8 (evenPhase6)

[2 1] [3 3] [4 5] [6 8] (oddPhase7)

1 [2 3] [3 4] [5 6] 8 (evenPhase8)

[1 2] [3 3] [4 5] [6 8] (oddPhase9)

Sorted

ความซับซ้อนของเวลา (Time Complexity) : O(N2) , N = จำนวนของสมาชิกที่อยู่ในอาเรย์

และมีความซับซ้อนของเวลาในกรณีที่ดีที่สุด : O(N)

พื้นที่เสริม (Auxiliary Space) : O(1). เหมือนกับ bubble sort และนี้ยังเป็นอัลกอริทึมแบบแทนที่