Odd–even sort
![]() Example of odd-even transposition sort sorting a list of random numbers. |
|
| Class | Sorting algorithm |
|---|---|
| Data structure | Array |
| Worst case performance | ![]() |
In computing, an odd–even sort or odd–even transposition sort (also known as brick sort[1]) is a relatively simple sorting algorithm, developed originally for use on parallel processors with local interconnections. It is a comparison sort related to bubble sort, with which it shares many characteristics. It functions by comparing all (odd, even)-indexed pairs of adjacent elements in the list and, if a pair is in the wrong order (the first is larger than the second) the elements are switched. The next step repeats this for (even, odd)-indexed pairs (of adjacent elements). Then it alternates between (odd, even) and (even, odd) steps until the list is sorted.
Contents |
Sorting on processor arrays [edit]
On parallel processors, with one value per processor and only local left–right neighbor connections, the processors all concurrently do a compare–exchange operation with their neighbors, alternating between odd–even and even–odd pairings. This algorithm was originally presented, and shown to be efficient on such processors, by Habermann in 1972.[2]
The algorithm extends efficiently to the case of multiple items per processor. In the Baudet–Stevenson odd–even merge-splitting algorithm, each processor sorts its own sublist at each step, using any efficient sort algorithm, and then performs a merge splitting, or transposition–merge, operation with its neighbor, with neighbor pairing alternating between odd–even and even–odd on each step.[3]
Batcher's odd–even mergesort [edit]
A related but more efficient sort algorithm is the Batcher odd–even mergesort, using compare–exchange operations and perfect-shuffle operations.[4] Batcher's method is efficient on parallel processors with long-range connections.[5]
Algorithm [edit]
The single-processor algorithm, like bubblesort, is simple but not very efficient. Here a zero-based index is assumed:
/* Assumes a is an array of values to be sorted. */ var sorted = false; while(!sorted) { sorted=true; for(var i = 1; i < list.length-1; i += 2) { if(a[i] > a[i+1]) { swap(a, i, i+1); sorted = false; } } for(var i = 0; i < list.length-1; i += 2) { if(a[i] > a[i+1]) { swap(a, i, i+1); sorted = false; } } }
References [edit]
- ^ Phillips, Malcolm. Sort Techniques "Array Sorting". Retrieved 3 August 2011.
- ^ N. Haberman (1972) "Parallel Neighbor Sort (or the Glory of the Induction Principle)," CMU Computer Science Report (available as Technical report AD-759 248, National Technical Information Service, US Department of Commerce, 5285 Port Royal Rd Sprigfield VA 22151).
- ^ S. Lakshmivarahan, S. K. Dhall, and L. L. Miller (1984), "Parallel Sorting Algorithms", in Franz L. Alt and Marshall C. Yovits, Advances in computers (Academic Press) 23: 295–351, ISBN 978-0-12-012123-6
- ^ Robert Sedgewick (2003). Algorithms in Java, Parts 1-4 (3rd ed.). Addison-Wesley Professional. pp. 454–464. ISBN 978-0-201-36120-9.
- ^ Allen Kent and James G. Williams (1993). Encyclopedia of Computer Science and Technology: Supplement 14. CRC Press. pp. 33–38. ISBN 978-0-8247-2282-1.
|
|||||||||||||||||||||||||||||
| This computer science article is a stub. You can help Wikipedia by expanding it. |

