Recent from talks
Nothing was collected or created yet.
Sorting network
View on Wikipedia
In computer science, comparator networks are abstract devices built up of a fixed number of "wires", carrying values, and comparator modules that connect pairs of wires, swapping the values on the wires if they are not in a desired order. Such networks are typically designed to perform sorting on fixed numbers of values, in which case they are called sorting networks.
Sorting networks differ from general comparison sorts in that they are not capable of handling arbitrarily large inputs, and in that their sequence of comparisons is set in advance, regardless of the outcome of previous comparisons. In order to sort a larger number of inputs, new sorting networks must be constructed. This independence of comparison sequences is useful for parallel execution and for implementation in hardware. Despite the simplicity of sorting nets, their theory is surprisingly deep and complex. Sorting networks were first studied circa 1954 by Armstrong, Nelson and O'Connor,[1] who subsequently patented the idea.[2]
Sorting networks can be implemented either in hardware or in software. Donald Knuth describes how the comparators for binary integers can be implemented as simple, three-state electronic devices.[1] Batcher, in 1968, suggested using them to construct switching networks for computer hardware, replacing both buses and the faster, but more expensive, crossbar switches.[3] Since the 2000s, sorting nets (especially bitonic mergesort) are used by the GPGPU community for constructing sorting algorithms to run on graphics processing units.[4]
Introduction
[edit]
A sorting network consists of two types of items: comparators and wires. The wires are thought of as running from left to right, carrying values (one per wire) that traverse the network all at the same time. Each comparator connects two wires. When a pair of values, traveling through a pair of wires, encounter a comparator, the comparator swaps the values if and only if the top wire's value is greater or equal to the bottom wire's value.
In a formula, if the top wire carries x and the bottom wire carries y, then after hitting a comparator the wires carry and , respectively, so the pair of values is sorted.[5]: 635 A network of wires and comparators that will correctly sort all possible inputs into ascending order is called a sorting network or Kruskal hub. By reflecting the network, it is also possible to sort all inputs into descending order.
The full operation of a simple sorting network is shown below. It is evident why this sorting network will correctly sort the inputs; note that the first four comparators will "sink" the largest value to the bottom and "float" the smallest value to the top. The final comparator sorts out the middle two wires.
Depth and efficiency
[edit]The efficiency of a sorting network can be measured by its total size, meaning the number of comparators in the network, or by its depth, defined (informally) as the largest number of comparators that any input value can encounter on its way through the network. Noting that sorting networks can perform certain comparisons in parallel (represented in the graphical notation by comparators that lie on the same vertical line), and assuming all comparisons to take unit time, it can be seen that the depth of the network is equal to the number of time steps required to execute it.[5]: 636–637
Insertion and Bubble networks
[edit]We can easily construct a network of any size recursively using the principles of insertion and selection. Assuming we have a sorting network of size n, we can construct a network of size n + 1 by "inserting" an additional number into the already sorted subnet (using the principle underlying insertion sort). We can also accomplish the same thing by first "selecting" the lowest value from the inputs and then sort the remaining values recursively (using the principle underlying bubble sort).

The structure of these two sorting networks are very similar. A construction of the two different variants, which collapses together comparators that can be performed simultaneously shows that, in fact, they are identical.[1]
The insertion network (or equivalently, bubble network) has a depth of 2n - 3,[1] where n is the number of values. This is better than the O(n log n) time needed by random-access machines, but it turns out that there are much more efficient sorting networks with a depth of just O(log2 n), as described below.
Zero-one principle
[edit]While it is easy to prove the validity of some sorting networks (like the insertion/bubble sorter), it is not always so easy. There are n! permutations of numbers in an n-wire network, and to test all of them would take a significant amount of time, especially when n is large. The number of test cases can be reduced significantly, to 2n, using the so-called zero-one principle. While still exponential, this is smaller than n! for all n ≥ 4, and the difference grows quite quickly with increasing n.
The zero-one principle states that, if a sorting network can correctly sort all 2n sequences of zeros and ones, then it is also valid for arbitrary ordered inputs. This not only drastically cuts down on the number of tests needed to ascertain the validity of a network, it is of great use in creating many constructions of sorting networks as well.
The principle can be proven by first observing the following fact about comparators: when a monotonically increasing function f is applied to the inputs, i.e., x and y are replaced by f(x) and f(y), then the comparator produces min(f(x), f(y)) = f(min(x, y)) and max(f(x), f(y)) = f(max(x, y)). By induction on the depth of the network, this result can be extended to a lemma stating that if the network transforms the sequence a1, ..., an into b1, ..., bn, it will transform f(a1), ..., f(an) into f(b1), ..., f(bn). Suppose that some input a1, ..., an contains two items ai < aj, and the network incorrectly swaps these in the output. Then it will also incorrectly sort f(a1), ..., f(an) for the function
This function is monotonic, so we have the zero-one principle as the contrapositive.[5]: 640–641
Constructing sorting networks
[edit]Various algorithms exist to construct sorting networks of depth O(log2 n) (hence size O(n log2 n)) such as Batcher odd–even mergesort, bitonic sort, Shell sort, and the Pairwise sorting network. These networks are often used in practice.
It is also possible to construct networks of depth O(log n) (hence size O(n log n)) using a construction called the AKS network, after its discoverers Ajtai, Komlós, and Szemerédi.[6] While an important theoretical discovery, the AKS network has very limited practical application because of the large linear constant hidden by the Big-O notation.[5]: 653 These are partly due to a construction of an expander graph.
A simplified version of the AKS network was described by Paterson in 1990, who noted that "the constants obtained for the depth bound still prevent the construction being of practical value".[7]
A more recent construction called the zig-zag sorting network of size O(n log n) was discovered by Goodrich in 2014.[8] While its size is much smaller than that of AKS networks, its depth O(n log n) makes it unsuitable for a parallel implementation.
Optimal sorting networks
[edit]For small, fixed numbers of inputs n, optimal sorting networks can be constructed, with either minimal depth (for maximally parallel execution) or minimal size (number of comparators). These networks can be used to increase the performance of larger sorting networks resulting from the recursive constructions of, e.g., Batcher, by halting the recursion early and inserting optimal nets as base cases.[9] The following table summarizes the optimality results for small networks for which the optimal depth is known:
| n | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Depth[10] | 0 | 1 | 3 | 3 | 5 | 5 | 6 | 6 | 7 | 7 | 8 | 8 | 9 | 9 | 9 | 9 | 10 |
| Size, upper bound[11] | 0 | 1 | 3 | 5 | 9 | 12 | 16 | 19 | 25 | 29 | 35 | 39 | 45 | 51 | 56 | 60 | 71 |
| Size, lower bound (if different)[12] | 43 | 47 | 51 | 55 | 60 |
For larger networks neither the optimal depth nor the optimal size are currently known. The bounds known so far are provided in the table below:
| n | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Depth, upper bound[10][13][14][15] | 11 | 11 | 11 | 12 | 12 | 12 | 12 | 13 | 13 | 13 | 13 | 14 | 14 | 14 | 14 |
| Depth, lower bound[10] | 10 | 10 | 10 | 10 | 10 | 10 | 10 | 10 | 10 | 10 | 10 | 10 | 10 | 10 | 10 |
| Size, upper bound[14] | 77 | 85 | 91 | 99 | 106 | 114 | 120 | 130 | 138 | 147 | 155 | 164 | 172 | 180 | 185 |
| Size, lower bound[12] | 65 | 70 | 75 | 80 | 85 | 90 | 95 | 100 | 105 | 110 | 115 | 120 | 125 | 130 | 135 |
The first sixteen depth-optimal networks are listed in Knuth's Art of Computer Programming,[1] and have been since the 1973 edition; however, while the optimality of the first eight was established by Floyd and Knuth in the 1960s, this property wasn't proven for the final six until 2014[16] (the cases nine and ten having been decided in 1991[9]).
For one to twelve inputs, minimal (i.e. size-optimal) sorting networks are known, and for higher values, lower bounds on their sizes S(n) can be derived inductively using a lemma due to Van Voorhis[1] (p. 240): S(n) ≥ S(n − 1) + ⌈log2n⌉. The first ten optimal networks have been known since 1969, with the first eight again being known as optimal since the work of Floyd and Knuth, but optimality of the cases n = 9 and n = 10 took until 2014 to be resolved.[11] The optimality of the smallest known sorting networks for n = 11 and n = 12 was resolved in 2020.[17][1]
Some work in designing optimal sorting network has been done using genetic algorithms: D. Knuth mentions that the smallest known sorting network for n = 13 was found by Hugues Juillé in 1995 "by simulating an evolutionary process of genetic breeding"[1] (p. 226), and that the minimum depth sorting networks for n = 9 and n = 11 were found by Loren Schwiebert in 2001 "using genetic methods"[1] (p. 229).
Complexity of testing sorting networks
[edit]Unless P=NP, the problem of testing whether a candidate network is a sorting network is likely to remain difficult for networks of large sizes, due to the problem being co-NP-complete.[18]
References
[edit]- ^ a b c d e f g h i Knuth, D. E. (1997). The Art of Computer Programming, Volume 3: Sorting and Searching (Second ed.). Addison–Wesley. pp. 219–247. ISBN 978-0-201-89685-5. Section 5.3.4: Networks for Sorting.
- ^ US 3029413, O'Connor, Daniel G. & Nelson, Raymond J., "Sorting system with n-line sorting switch", published 10 April 1962
- ^ Batcher, K. E. (1968). Sorting networks and their applications. Proc. AFIPS Spring Joint Computer Conference. pp. 307–314.
- ^ Owens, J. D.; Houston, M.; Luebke, D.; Green, S.; Stone, J. E.; Phillips, J. C. (2008). "GPU Computing". Proceedings of the IEEE. 96 (5): 879–899. doi:10.1109/JPROC.2008.917757. S2CID 17091128.
- ^ a b c d Cormen, Thomas H.; Leiserson, Charles E.; Rivest, Ronald L. (1990). Introduction to Algorithms (1st ed.). MIT Press and McGraw-Hill. ISBN 0-262-03141-8.
- ^ Ajtai, M.; Komlós, J.; Szemerédi, E. (1983). An O(n log n) sorting network. STOC '83. Proceedings of the fifteenth annual ACM symposium on Theory of computing. pp. 1–9. doi:10.1145/800061.808726. ISBN 0-89791-099-0.
- ^ Paterson, M. S. (1990). "Improved sorting networks with O(log N) depth". Algorithmica. 5 (1–4): 75–92. doi:10.1007/BF01840378. S2CID 2064561.
- ^ Goodrich, Michael (March 2014). "Zig-zag sort". Proceedings of the forty-sixth annual ACM symposium on Theory of computing. pp. 684–693. arXiv:1403.2777. doi:10.1145/2591796.2591830. ISBN 9781450327107. S2CID 947950.
- ^ a b Parberry, Ian (1991). "A Computer Assisted Optimal Depth Lower Bound for Nine-Input Sorting Networks" (PDF). Mathematical Systems Theory. 24: 101–116. CiteSeerX 10.1.1.712.219. doi:10.1007/bf02090393. S2CID 7077160.
- ^ a b c Codish, Michael; Cruz-Filipe, Luís; Ehlers, Thorsten; Müller, Mike; Schneider-Kamp, Peter (2015). Sorting Networks: to the End and Back Again. arXiv:1507.01428. Bibcode:2015arXiv150701428C.
- ^ a b Codish, Michael; Cruz-Filipe, Luís; Frank, Michael; Schneider-Kamp, Peter (2014). Twenty-Five Comparators is Optimal when Sorting Nine Inputs (and Twenty-Nine for Ten). Proc. Int'l Conf. Tools with AI (ICTAI). pp. 186–193. arXiv:1405.5754. Bibcode:2014arXiv1405.5754C.
- ^ a b Obtained by Van Voorhis lemma and the value S(11) = 35
- ^ Ehlers, Thorsten (February 2017). "Merging almost sorted sequences yields a 24-sorter". Information Processing Letters. 118: 17–20. doi:10.1016/j.ipl.2016.08.005.
- ^ a b Dobbelaere, Bert. "SorterHunter". GitHub. Retrieved 2 Jan 2022.
- ^ Wang, Chengu (2025). "Depth-13 Sorting Networks for 28 Channels". arXiv:2511.04107 [cs.DS].
- ^ Bundala, D.; Závodný, J. (2014). "Optimal Sorting Networks". Language and Automata Theory and Applications. Lecture Notes in Computer Science. Vol. 8370. pp. 236–247. arXiv:1310.6271. doi:10.1007/978-3-319-04921-2_19. ISBN 978-3-319-04920-5. S2CID 16860013.
- ^ Harder, Jannis (2020). "An Answer to the Bose-Nelson Sorting Problem for 11 and 12 Channels". arXiv:2012.04400 [cs.DS].
- ^ Parberry, Ian (1991). On the Computational Complexity of Optimal Sorting Network Verification. Proc. PARLE '91: Parallel Architectures and Languages Europe, Volume I: Parallel Architectures and Algorithms, Eindhoven, the Netherlands. pp. 252–269.
- Angel, O.; Holroyd, A. E.; Romik, D.; Virág, B. (2007). "Random sorting networks". Advances in Mathematics. 215 (2): 839–868. arXiv:math/0609538. doi:10.1016/j.aim.2007.05.019.
External links
[edit]- List of smallest sorting networks for given number of inputs
- Sorting Networks
- CHAPTER 28: SORTING NETWORKS
- Sorting Networks
- Tool for generating and graphing sorting networks
- Sorting networks and the END algorithm
- Lipton, Richard J.; Regan, Ken (24 April 2014). "Galactic Sorting Networks". Gödel’s Lost Letter and P=NP.
- Sorting Networks validity
Sorting network
View on GrokipediaFundamentals
Definition
A sorting network is a fixed architecture composed of a sequence of comparator operations designed to sort any sequence of inputs into non-decreasing order, regardless of the initial arrangement of the values. These networks are oblivious, meaning the sequence of operations is predetermined and does not depend on the specific input values, making them suitable for parallel processing in hardware or fixed-purpose sorting tasks.[3] Formally, a sorting network can be represented as a directed acyclic graph with input wires and output wires, where the edges correspond to comparators that connect pairs of wires. The inputs enter the network along the input wires from the top, and the values propagate downward through the structure, with each comparator acting on the values currently on its connected wires. A comparator examines the two values it receives and outputs the smaller one to the upper wire and the larger one to the lower wire, effectively swapping them if necessary to maintain order.[5][3] For illustration, consider a simple sorting network for three inputs on wires labeled 1 (top), 2, and 3 (bottom). It consists of three comparators arranged in sequence: first, a comparator between wires 1 and 2; second, between wires 2 and 3; and third, between wires 1 and 2 again. This arrangement ensures that, for any input values on wires 1, 2, 3 respectively, the outputs will be the sorted values in non-decreasing order from top to bottom.Comparators
A comparator is the fundamental building block of a sorting network, defined as a binary operation that takes two input values and and produces two outputs: the minimum of the two values on one channel and the maximum on the other.[3] This operation ensures that the smaller value is directed to the upper output and the larger to the lower output, regardless of the original order of the inputs. In graphical representations of sorting networks, comparators are typically depicted as two parallel horizontal wires connected by a vertical line or a crossing symbol (often resembling an "X" or a gate), indicating the comparison and potential swap between the values on those wires.[3] This visualization emphasizes the fixed connection between specific channels, with arrows or labels sometimes denoting the direction of data flow from inputs to outputs. Mathematically, a comparator operating on channels and (with ) transforms inputs and such that the output on channel becomes and on channel becomes . This notation assumes channels are ordered from top to bottom or left to right, with lower indices corresponding to smaller expected values in the final sorted sequence. Comparators in sorting networks possess key properties that underpin their utility. They are oblivious, meaning the positions and pairings of comparisons are predetermined and independent of the specific input values, enabling parallel execution without data-dependent control flow.[6] Additionally, comparators are idempotent: applying the same comparator twice in succession to the same pair of channels has no effect, as the first application ensures the outputs are already sorted relative to each other, rendering the second redundant.Key Properties
Size and Depth
In sorting networks, the size refers to the total number of comparators used in the network, which determines the overall computational cost in terms of comparison operations.[7] The depth is defined as the maximum number of comparators along any path from an input wire to an output wire, corresponding to the number of parallel time steps required to complete the sorting process when comparators in each layer operate simultaneously.[7] Early constructions, such as the Bose-Nelson network introduced in 1962, achieved sorting with a size of and a depth of , reflecting the quadratic growth typical of initial recursive insertion-like methods. These parameters highlight the foundational challenges in balancing efficiency, as subsequent developments sought to reduce both metrics asymptotically. A key trade-off exists between size and depth: designs that minimize size often increase depth, and vice versa, due to the constraints of parallel execution. For instance, Batcher's odd-even mergesort construction yields networks with size and depth , providing practical improvements over early quadratic bounds while maintaining parallelism. Unlike adaptive comparison-based sorting algorithms, such as quicksort or mergesort, which dynamically select comparisons based on input data to achieve an average-case complexity of , sorting networks employ a fixed, data-oblivious sequence of comparators that performs the same operations regardless of the input values.[8] This non-adaptive nature ensures predictable parallel performance but may lead to redundant comparisons for certain inputs.[9]Zero-One Principle
The zero-one principle states that a comparator network is a sorting network—meaning it transforms any input sequence of real numbers into non-decreasing order—if and only if it correctly sorts all possible binary input sequences consisting of 0s and 1s into non-decreasing order.[10] This equivalence holds because the principle reduces the verification of correctness to a manageable subset of test cases, focusing solely on binary inputs rather than the full set of permutations of distinct elements. The proof of the zero-one principle relies on the monotonicity-preserving property of comparator networks. Specifically, each comparator outputs the minimum and maximum of its inputs, which is a monotonically non-decreasing transformation. A key lemma establishes that if a comparator network maps an input sequence to an output sequence , then applying a monotonically increasing function to the inputs yields as the output when applied to .[11] This lemma follows by induction on the network's structure: a single comparator preserves the form due to monotonicity of (since and similarly for ), and the property extends to the full network. To prove the principle, assume the network sorts all 0-1 sequences but fails on some arbitrary input sequence where an output position has . Define if and otherwise; this is monotonically increasing. By the lemma, the network applied to produces an output where the -th position is and the -th is , contradicting the assumption that all 0-1 sequences are sorted correctly. The converse direction is immediate, as 0-1 sequences are a subset of arbitrary sequences.[11] This principle has significant implications for verifying sorting networks, reducing the number of cases to check from (all permutations) to (binary combinations), which is exponentially smaller and enables practical computational testing even for moderate . For example, consider a simple 3-input sorting network consisting of comparators between wires 1-2, then 2-3, then 1-2 again (a basic insertion-like structure with 3 comparators). To verify it using the zero-one principle, enumerate the 8 binary inputs: all 0s outputs all 0s; one 1 (in any position) outputs ; two 1s outputs ; all 1s outputs all 1s. Checking these confirms the network sorts them correctly, implying it sorts arbitrary 3-element sequences. This network uses 3 comparators, which is optimal for n=3.[10]Construction Techniques
Batcher's Odd-Even Mergesort
Batcher's odd-even mergesort is a recursive construction for building sorting networks that divides the input into halves, sorts them recursively, and then merges the results using a specialized odd-even merging procedure.[3] This approach enables parallel execution of comparisons, making it suitable for hardware implementations where multiple comparators operate simultaneously.[3] Invented by Kenneth E. Batcher in 1968, it was the first practical method for constructing sorting networks with predictable performance, influencing subsequent parallel sorting designs.[3] The algorithm assumes the input size for some integer . To sort elements, it first recursively sorts the first elements and the second elements in parallel, producing two sorted halves.[12] The merging step then combines these halves using an odd-even merger, which itself is recursive. In the odd-even merge for two sorted lists of length , the elements are split into odd-indexed positions (1st, 3rd, ..., (2m-1)th from the combined list) and even-indexed positions (2nd, 4th, ..., 2mth). These two subsequences of length are recursively merged separately to form sorted odd and even outputs. Finally, a single layer of comparators connects adjacent positions in the outputs (comparing the 2nd with 3rd, 4th with 5th, etc.), ensuring the full sorted order. The base case for merging two elements is a single comparator.[12] The depth of the sorting network, representing the number of parallel steps, follows the recurrence , where is the depth of the n-element merger, satisfying with , so . Solving yields , specifically for .[12] The total size , or number of comparators, is given by , where is the size of the n-element merger satisfying with , and , resulting in .[12] To illustrate for (where ), the network first sorts the halves [positions 1-4] and [5-8] recursively, each requiring depth 3, in parallel (depth 3 total so far). The odd subsequence (positions 1,3,5,7) and even (2,4,6,8) are then merged recursively (each depth 2), followed by 3 comparators on pairs (2-3, 4-5, 6-7) in one step, adding depth 3 for a total depth of 6. For an input like [2,7,6,3,9,4,1,8], the halves sort to [2,3,6,7] and [1,4,8,9]; odds merge to [1,2,6,8] and evens to [3,4,7,9]; final comparisons yield [1,2,3,4,6,7,8,9].[12] This example demonstrates the divide-and-conquer structure, with 19 comparators total for .[12]Insertion and Bubble Networks
Insertion sorting networks mimic the sequential insertion sort algorithm by successively building a sorted prefix of the input elements. To construct such a network for n elements, begin with the first element as the initial sorted list. For each subsequent element i (from 2 to n), insert it into the correct position within the current sorted prefix of i-1 elements by adding a chain of comparators that sequentially compare the new element with each position in the prefix, swapping as necessary to shift larger elements rightward until the insertion point is found. This process requires i-1 comparators for the i-th insertion, resulting in a total size of O(n^2) comparators. However, since the comparisons for each insertion are performed sequentially along the chain, the depth accumulates additively, yielding a depth of O(n^2).[13] Bubble sorting networks, in contrast, are derived from the bubble sort algorithm and employ parallel compare-exchange operations across multiple phases to propagate larger elements toward the end of the list. The construction uses n phases, where each phase consists of simultaneous comparisons of adjacent pairs; in odd-numbered phases, compare positions (1,2), (3,4), ..., and in even-numbered phases, compare (2,3), (4,5), .... This odd-even transposition pattern ensures that misplaced elements "bubble" upward through the network over the phases. The number of active comparators decreases slightly in later phases but remains roughly n/2 per phase on average, leading to a total size of O(n^2) comparators and a depth of O(n).[14] For a concrete example with n=4 inputs labeled a1, a2, a3, a4, the bubble network proceeds as follows:- Phase 1 (odd): Compare-swap a1↔a2 and a3↔a4.
- Phase 2 (even): Compare-swap a2↔a3.
- Phase 3 (odd): Compare-swap a1↔a2 and a3↔a4.
- Phase 4 (even): Compare-swap a2↔a3.
Optimality and Analysis
Optimal Networks
In sorting networks, optimality is defined with respect to either size or depth for a given number of inputs . A size-optimal sorting network minimizes the total number of comparators, while a depth-optimal sorting network minimizes the number of parallel steps (layers), allowing for maximal parallelism. These criteria are often pursued separately, as a network achieving minimal size may not have minimal depth, and vice versa.[16] For small values of , optimal sorting networks have been fully characterized through exhaustive computational searches and formal proofs. Size optimality is established for , with the minimal number of comparators given by the sequence A003075 in the OEIS. Depth optimality is proven for . The following table summarizes the known optimal sizes and depths for ; values beyond this are best-known upper bounds unless otherwise noted, but all listed depths up to are optimal.[17][16][18]| Optimal Size (Comparators) | Optimal Depth (Layers) | |
|---|---|---|
| 2 | 1 | 1 |
| 3 | 3 | 3 |
| 4 | 5 | 3 |
| 5 | 9 | 5 |
| 6 | 12 | 5 |
| 7 | 16 | 6 |
| 8 | 19 | 6 |
| 9 | 25 | 7 |
| 10 | 29 | 7 |



