Sorting networks optimized for worst case swap count

The sorting networks on this page have been optimized to reduce the worst case number of swaps executed for any input permutation.

For some applications (e.g. real-time computing), understanding of this worst case behaviour is important.
The network will still perform all comparisons, we just try to limit the number of elements that actually change the order.
The size and depth of the networks matches the smallest size networks from the regular list of sorting networks.
Whether the reduction of swaps actually reduces the resource consumption will depend on the target architecture.

You may notice this list is shorter than the others on this site. This is because of the amount of computation involved to verify the worst case swap count.
The networks were obtained by applying input order transformations on the outputs from SorterHunter, trying to improve the swap count.

For questions, remarks, or to contribute improved results please contact bert.o.dobbelaere[at]telenet[dot]be.

For optimization of the average number of swaps, see this page.

Summary table

Number of inputsSizeDepthMax swap countAverage swap countComments
2111 worst case0.5 
3332 worst case1.16666667 
4534 worst case2.33333333 
5956 worst case3.13333333 
61258 worst case4.7 
716611 worst case5.89047619 
819614 worst case7.94285714 
925717 worst case9.02539683 
1029821 worst case10.77619048 
1135823 worst case13.10577201 
1239927 worst case14.60606061 
13451032 worst case16.91999112 
14511035 worst case19.88281718 
15561041 worst case21.45675436 
16601046 worst case23.86853147 

Individual networks:

Sorting network for 2 inputs, 1 CE, 1 layer.
Worst case 1 swaps, 0.5 swaps on average.

[(0,1)]

Auto generated
Sorting network for 3 inputs, 3 CEs, 3 layers.
Worst case 2 swaps, 1.16666667 swaps on average.

[(0,2)]
[(0,1)]
[(1,2)]

Auto generated
Sorting network for 4 inputs, 5 CEs, 3 layers.
Worst case 4 swaps, 2.33333333 swaps on average.

[(0,3),(1,2)]
[(0,1),(2,3)]
[(1,2)]

Auto generated
Sorting network for 5 inputs, 9 CEs, 5 layers.
Worst case 6 swaps, 3.13333333 swaps on average.

[(0,4)]
[(0,2),(1,4)]
[(1,3),(2,4)]
[(0,1),(2,3)]
[(1,2),(3,4)]

Auto generated
Sorting network for 6 inputs, 12 CEs, 5 layers.
Worst case 8 swaps, 4.7 swaps on average.

[(0,5),(1,3),(2,4)]
[(0,2),(1,4),(3,5)]
[(0,1),(2,3),(4,5)]
[(1,2),(3,4)]
[(2,3)]

Auto generated
Sorting network for 7 inputs, 16 CEs, 6 layers.
Worst case 11 swaps, 5.89047619 swaps on average.

[(0,6),(1,5),(2,3)]
[(0,2),(1,4),(3,6)]
[(0,1),(3,5),(4,6)]
[(1,3),(2,4),(5,6)]
[(2,3),(4,5)]
[(1,2),(3,4)]

Auto generated
Sorting network for 8 inputs, 19 CEs, 6 layers.
Worst case 14 swaps, 7.94285714 swaps on average.

[(0,7),(1,6),(2,5),(3,4)]
[(0,2),(1,3),(4,6),(5,7)]
[(0,1),(2,4),(3,5),(6,7)]
[(1,3),(4,6)]
[(2,3),(4,5)]
[(1,2),(3,4),(5,6)]

Auto generated
Sorting network for 9 inputs, 25 CEs, 7 layers.
Worst case 17 swaps, 9.02539683 swaps on average.

[(0,8),(1,6),(2,5),(4,7)]
[(0,4),(2,6),(3,7),(5,8)]
[(0,2),(1,5),(3,4),(6,8)]
[(1,3),(4,6),(5,7)]
[(0,1),(2,4),(3,5),(7,8)]
[(2,3),(4,5),(6,7)]
[(1,2),(3,4),(5,6)]

Auto generated
Sorting network for 10 inputs, 29 CEs, 8 layers.
Worst case 21 swaps, 10.77619048 swaps on average.

[(0,7),(1,6),(2,9),(3,8),(4,5)]
[(0,3),(1,4),(5,8),(6,9)]
[(0,2),(3,6),(7,9)]
[(0,1),(2,4),(5,7),(8,9)]
[(1,3),(2,5),(4,7),(6,8)]
[(1,2),(3,5),(4,6),(7,8)]
[(2,3),(4,5),(6,7)]
[(3,4),(5,6)]

Auto generated
Sorting network for 11 inputs, 35 CEs, 8 layers.
Worst case 23 swaps, 13.10577201 swaps on average.

[(0,9),(1,7),(3,10),(4,5),(6,8)]
[(0,6),(2,7),(3,4),(5,10),(8,9)]
[(0,3),(1,6),(2,8),(7,10)]
[(1,2),(4,6),(5,8),(7,9)]
[(1,4),(2,5),(3,7),(6,8),(9,10)]
[(0,1),(2,3),(4,5),(6,7),(8,9)]
[(1,2),(3,4),(5,6),(7,8)]
[(2,3),(4,5),(6,7)]

Auto generated
Sorting network for 12 inputs, 39 CEs, 9 layers.
Worst case 27 swaps, 14.60606061 swaps on average.

[(0,11),(1,10),(2,9),(3,8),(4,7),(5,6)]
[(0,5),(1,3),(6,11),(8,10)]
[(0,2),(3,7),(4,8),(9,11)]
[(1,4),(2,5),(6,9),(7,10)]
[(0,1),(2,4),(3,6),(5,8),(7,9),(10,11)]
[(1,3),(4,7),(5,6),(8,10)]
[(1,2),(3,5),(6,8),(9,10)]
[(2,3),(4,5),(6,7),(8,9)]
[(3,4),(5,6),(7,8)]

Auto generated
Sorting network for 13 inputs, 45 CEs, 10 layers.
Worst case 32 swaps, 16.91999112 swaps on average.

[(0,12),(1,11),(2,10),(3,7),(4,9),(5,6)]
[(0,4),(1,3),(2,5),(6,10),(7,11),(9,12)]
[(0,2),(1,8),(3,9),(4,7),(10,12)]
[(0,1),(2,8),(3,5),(4,6)]
[(1,3),(2,4),(5,7),(6,9),(8,11)]
[(1,2),(3,4),(8,10),(11,12)]
[(2,3),(4,6),(5,8),(7,10),(9,11)]
[(4,5),(6,8),(7,9),(10,11)]
[(3,4),(5,6),(7,8),(9,10)]
[(6,7),(8,9)]

Auto generated
Sorting network for 14 inputs, 51 CEs, 10 layers.
Worst case 35 swaps, 19.88281718 swaps on average.

[(0,13),(1,12),(2,11),(3,10),(4,9),(5,8),(6,7)]
[(0,5),(1,3),(2,4),(8,13),(9,11),(10,12)]
[(0,6),(1,2),(3,8),(5,10),(7,13),(11,12)]
[(0,1),(2,6),(3,4),(7,11),(9,10),(12,13)]
[(3,7),(4,8),(5,9),(6,10)]
[(1,3),(2,5),(4,9),(8,11),(10,12)]
[(1,2),(3,5),(4,7),(6,9),(8,10),(11,12)]
[(2,3),(5,6),(7,8),(10,11)]
[(4,5),(6,7),(8,9)]
[(3,4),(5,6),(7,8),(9,10)]

Auto generated
Sorting network for 15 inputs, 56 CEs, 10 layers.
Worst case 41 swaps, 21.45675436 swaps on average.

[(0,13),(1,14),(2,8),(3,10),(4,7),(5,9),(6,12)]
[(0,5),(1,3),(2,4),(6,11),(7,8),(9,13),(10,14)]
[(0,6),(1,2),(3,7),(4,10),(5,11),(8,14),(9,12)]
[(0,1),(2,5),(3,6),(4,9),(7,11),(8,12),(10,13)]
[(1,3),(2,4),(5,8),(6,10),(7,9),(11,13),(12,14)]
[(1,2),(3,4),(5,7),(8,10),(11,12),(13,14)]
[(2,3),(4,6),(9,11),(12,13)]
[(4,5),(6,7),(8,9),(10,11)]
[(3,4),(5,6),(7,8),(9,10),(11,12)]
[(6,7),(8,9)]

Auto generated
Sorting network for 16 inputs, 60 CEs, 10 layers.
Worst case 46 swaps, 23.86853147 swaps on average.

[(0,15),(1,14),(2,13),(3,12),(4,11),(5,10),(6,9),(7,8)]
[(0,5),(1,7),(2,6),(3,4),(8,14),(9,13),(10,15),(11,12)]
[(0,2),(1,3),(4,8),(5,9),(6,10),(7,11),(12,14),(13,15)]
[(0,1),(2,7),(3,5),(4,6),(8,13),(9,11),(10,12),(14,15)]
[(1,3),(2,4),(5,10),(6,9),(7,8),(11,13),(12,14)]
[(1,2),(3,4),(5,7),(8,10),(11,12),(13,14)]
[(2,3),(4,6),(9,11),(12,13)]
[(4,5),(6,7),(8,9),(10,11)]
[(3,4),(5,6),(7,8),(9,10),(11,12)]
[(6,7),(8,9)]

Auto generated

References

History

2024-05-19Lower worst case swap count for 11, 14 and 15 inputs. Optimized average swaps for 13 and 16 inputs.
2024-05-01Initial list

Page updated on Sun May 19 15:17:17 2024

See SorterHunter repo for previous versions.