Created
December 16, 2021 19:51
-
-
Save RobertDurfee/468373153e60ff7fed866f9c4d92e0ba to your computer and use it in GitHub Desktop.
Optimal serial software sorting networks for arrays with at most 16 elements.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #define CE(A, B) \ | |
| if ((A) > (B)) { \ | |
| int tmp = (A); \ | |
| (A) = (B); \ | |
| (B) = tmp; \ | |
| } | |
| void network2(int *start) { | |
| CE(start[0], start[1]); | |
| } | |
| void network3(int *start) { | |
| CE(start[0], start[2]); | |
| CE(start[0], start[1]); | |
| CE(start[1], start[2]); | |
| } | |
| void network4(int *start) { | |
| CE(start[0], start[2]); | |
| CE(start[1], start[3]); | |
| CE(start[0], start[1]); | |
| CE(start[2], start[3]); | |
| CE(start[1], start[2]); | |
| } | |
| void network5(int *start) { | |
| CE(start[0], start[3]); | |
| CE(start[1], start[4]); | |
| CE(start[0], start[2]); | |
| CE(start[1], start[3]); | |
| CE(start[0], start[1]); | |
| CE(start[2], start[4]); | |
| CE(start[1], start[2]); | |
| CE(start[3], start[4]); | |
| CE(start[2], start[3]); | |
| } | |
| void network6(int *start) { | |
| CE(start[0], start[5]); | |
| CE(start[1], start[3]); | |
| CE(start[2], start[4]); | |
| CE(start[1], start[2]); | |
| CE(start[3], start[4]); | |
| CE(start[0], start[3]); | |
| CE(start[2], start[5]); | |
| CE(start[0], start[1]); | |
| CE(start[2], start[3]); | |
| CE(start[4], start[5]); | |
| CE(start[1], start[2]); | |
| CE(start[3], start[4]); | |
| } | |
| void network7(int *start) { | |
| CE(start[0], start[6]); | |
| CE(start[2], start[3]); | |
| CE(start[4], start[5]); | |
| CE(start[0], start[2]); | |
| CE(start[1], start[4]); | |
| CE(start[3], start[6]); | |
| CE(start[0], start[1]); | |
| CE(start[2], start[5]); | |
| CE(start[3], start[4]); | |
| CE(start[1], start[2]); | |
| CE(start[4], start[6]); | |
| CE(start[2], start[3]); | |
| CE(start[4], start[5]); | |
| CE(start[1], start[2]); | |
| CE(start[3], start[4]); | |
| CE(start[5], start[6]); | |
| } | |
| void network8(int *start) { | |
| CE(start[0], start[2]); | |
| CE(start[1], start[3]); | |
| CE(start[4], start[6]); | |
| CE(start[5], start[7]); | |
| CE(start[0], start[4]); | |
| CE(start[1], start[5]); | |
| CE(start[2], start[6]); | |
| CE(start[3], start[7]); | |
| CE(start[0], start[1]); | |
| CE(start[2], start[3]); | |
| CE(start[4], start[5]); | |
| CE(start[6], start[7]); | |
| CE(start[2], start[4]); | |
| CE(start[3], start[5]); | |
| CE(start[1], start[4]); | |
| CE(start[3], start[6]); | |
| CE(start[1], start[2]); | |
| CE(start[3], start[4]); | |
| CE(start[5], start[6]); | |
| } | |
| void network9(int *start) { | |
| CE(start[0], start[3]); | |
| CE(start[1], start[7]); | |
| CE(start[2], start[5]); | |
| CE(start[4], start[8]); | |
| CE(start[0], start[7]); | |
| CE(start[2], start[4]); | |
| CE(start[3], start[8]); | |
| CE(start[5], start[6]); | |
| CE(start[0], start[2]); | |
| CE(start[1], start[3]); | |
| CE(start[4], start[5]); | |
| CE(start[7], start[8]); | |
| CE(start[1], start[4]); | |
| CE(start[3], start[6]); | |
| CE(start[5], start[7]); | |
| CE(start[0], start[1]); | |
| CE(start[2], start[4]); | |
| CE(start[3], start[5]); | |
| CE(start[6], start[8]); | |
| CE(start[2], start[3]); | |
| CE(start[4], start[5]); | |
| CE(start[6], start[7]); | |
| CE(start[1], start[2]); | |
| CE(start[3], start[4]); | |
| CE(start[5], start[6]); | |
| } | |
| void network10(int *start) { | |
| CE(start[0], start[8]); | |
| CE(start[1], start[9]); | |
| CE(start[2], start[7]); | |
| CE(start[3], start[5]); | |
| CE(start[4], start[6]); | |
| CE(start[0], start[2]); | |
| CE(start[1], start[4]); | |
| CE(start[5], start[8]); | |
| CE(start[7], start[9]); | |
| CE(start[0], start[3]); | |
| CE(start[2], start[4]); | |
| CE(start[5], start[7]); | |
| CE(start[6], start[9]); | |
| CE(start[0], start[1]); | |
| CE(start[3], start[6]); | |
| CE(start[8], start[9]); | |
| CE(start[1], start[5]); | |
| CE(start[2], start[3]); | |
| CE(start[4], start[8]); | |
| CE(start[6], start[7]); | |
| CE(start[1], start[2]); | |
| CE(start[3], start[5]); | |
| CE(start[4], start[6]); | |
| CE(start[7], start[8]); | |
| CE(start[2], start[3]); | |
| CE(start[4], start[5]); | |
| CE(start[6], start[7]); | |
| CE(start[3], start[4]); | |
| CE(start[5], start[6]); | |
| } | |
| void network11(int *start) { | |
| CE(start[0], start[9]); | |
| CE(start[1], start[6]); | |
| CE(start[2], start[4]); | |
| CE(start[3], start[7]); | |
| CE(start[5], start[8]); | |
| CE(start[0], start[1]); | |
| CE(start[3], start[5]); | |
| CE(start[4], start[10]); | |
| CE(start[6], start[9]); | |
| CE(start[7], start[8]); | |
| CE(start[1], start[3]); | |
| CE(start[2], start[5]); | |
| CE(start[4], start[7]); | |
| CE(start[8], start[10]); | |
| CE(start[0], start[4]); | |
| CE(start[1], start[2]); | |
| CE(start[3], start[7]); | |
| CE(start[5], start[9]); | |
| CE(start[6], start[8]); | |
| CE(start[0], start[1]); | |
| CE(start[2], start[6]); | |
| CE(start[4], start[5]); | |
| CE(start[7], start[8]); | |
| CE(start[9], start[10]); | |
| CE(start[2], start[4]); | |
| CE(start[3], start[6]); | |
| CE(start[5], start[7]); | |
| CE(start[8], start[9]); | |
| CE(start[1], start[2]); | |
| CE(start[3], start[4]); | |
| CE(start[5], start[6]); | |
| CE(start[7], start[8]); | |
| CE(start[2], start[3]); | |
| CE(start[4], start[5]); | |
| CE(start[6], start[7]); | |
| } | |
| void network12(int *start) { | |
| CE(start[0], start[8]); | |
| CE(start[1], start[7]); | |
| CE(start[2], start[6]); | |
| CE(start[3], start[11]); | |
| CE(start[4], start[10]); | |
| CE(start[5], start[9]); | |
| CE(start[0], start[1]); | |
| CE(start[2], start[5]); | |
| CE(start[3], start[4]); | |
| CE(start[6], start[9]); | |
| CE(start[7], start[8]); | |
| CE(start[10], start[11]); | |
| CE(start[0], start[2]); | |
| CE(start[1], start[6]); | |
| CE(start[5], start[10]); | |
| CE(start[9], start[11]); | |
| CE(start[0], start[3]); | |
| CE(start[1], start[2]); | |
| CE(start[4], start[6]); | |
| CE(start[5], start[7]); | |
| CE(start[8], start[11]); | |
| CE(start[9], start[10]); | |
| CE(start[1], start[4]); | |
| CE(start[3], start[5]); | |
| CE(start[6], start[8]); | |
| CE(start[7], start[10]); | |
| CE(start[1], start[3]); | |
| CE(start[2], start[5]); | |
| CE(start[6], start[9]); | |
| CE(start[8], start[10]); | |
| CE(start[2], start[3]); | |
| CE(start[4], start[5]); | |
| CE(start[6], start[7]); | |
| CE(start[8], start[9]); | |
| CE(start[4], start[6]); | |
| CE(start[5], start[7]); | |
| CE(start[3], start[4]); | |
| CE(start[5], start[6]); | |
| CE(start[7], start[8]); | |
| } | |
| void network13(int *start) { | |
| CE(start[0], start[12]); | |
| CE(start[1], start[10]); | |
| CE(start[2], start[9]); | |
| CE(start[3], start[7]); | |
| CE(start[5], start[11]); | |
| CE(start[6], start[8]); | |
| CE(start[1], start[6]); | |
| CE(start[2], start[3]); | |
| CE(start[4], start[11]); | |
| CE(start[7], start[9]); | |
| CE(start[8], start[10]); | |
| CE(start[0], start[4]); | |
| CE(start[1], start[2]); | |
| CE(start[3], start[6]); | |
| CE(start[7], start[8]); | |
| CE(start[9], start[10]); | |
| CE(start[11], start[12]); | |
| CE(start[4], start[6]); | |
| CE(start[5], start[9]); | |
| CE(start[8], start[11]); | |
| CE(start[10], start[12]); | |
| CE(start[0], start[5]); | |
| CE(start[3], start[8]); | |
| CE(start[4], start[7]); | |
| CE(start[6], start[11]); | |
| CE(start[9], start[10]); | |
| CE(start[0], start[1]); | |
| CE(start[2], start[5]); | |
| CE(start[6], start[9]); | |
| CE(start[7], start[8]); | |
| CE(start[10], start[11]); | |
| CE(start[1], start[3]); | |
| CE(start[2], start[4]); | |
| CE(start[5], start[6]); | |
| CE(start[9], start[10]); | |
| CE(start[1], start[2]); | |
| CE(start[3], start[4]); | |
| CE(start[5], start[7]); | |
| CE(start[6], start[8]); | |
| CE(start[2], start[3]); | |
| CE(start[4], start[5]); | |
| CE(start[6], start[7]); | |
| CE(start[8], start[9]); | |
| CE(start[3], start[4]); | |
| CE(start[5], start[6]); | |
| } | |
| void network14(int *start) { | |
| CE(start[0], start[6]); | |
| CE(start[1], start[11]); | |
| CE(start[2], start[12]); | |
| CE(start[3], start[10]); | |
| CE(start[4], start[5]); | |
| CE(start[7], start[13]); | |
| CE(start[8], start[9]); | |
| CE(start[1], start[2]); | |
| CE(start[3], start[7]); | |
| CE(start[4], start[8]); | |
| CE(start[5], start[9]); | |
| CE(start[6], start[10]); | |
| CE(start[11], start[12]); | |
| CE(start[0], start[4]); | |
| CE(start[1], start[3]); | |
| CE(start[5], start[6]); | |
| CE(start[7], start[8]); | |
| CE(start[9], start[13]); | |
| CE(start[10], start[12]); | |
| CE(start[0], start[1]); | |
| CE(start[2], start[9]); | |
| CE(start[3], start[7]); | |
| CE(start[4], start[11]); | |
| CE(start[6], start[10]); | |
| CE(start[12], start[13]); | |
| CE(start[2], start[5]); | |
| CE(start[4], start[7]); | |
| CE(start[6], start[9]); | |
| CE(start[8], start[11]); | |
| CE(start[1], start[2]); | |
| CE(start[3], start[4]); | |
| CE(start[6], start[7]); | |
| CE(start[9], start[10]); | |
| CE(start[11], start[12]); | |
| CE(start[1], start[3]); | |
| CE(start[2], start[4]); | |
| CE(start[5], start[6]); | |
| CE(start[7], start[8]); | |
| CE(start[9], start[11]); | |
| CE(start[10], start[12]); | |
| CE(start[2], start[3]); | |
| CE(start[4], start[7]); | |
| CE(start[6], start[9]); | |
| CE(start[10], start[11]); | |
| CE(start[4], start[5]); | |
| CE(start[6], start[7]); | |
| CE(start[8], start[9]); | |
| CE(start[3], start[4]); | |
| CE(start[5], start[6]); | |
| CE(start[7], start[8]); | |
| CE(start[9], start[10]); | |
| } | |
| void network15(int *start) { | |
| CE(start[1], start[2]); | |
| CE(start[3], start[10]); | |
| CE(start[4], start[14]); | |
| CE(start[5], start[8]); | |
| CE(start[6], start[13]); | |
| CE(start[7], start[12]); | |
| CE(start[9], start[11]); | |
| CE(start[0], start[14]); | |
| CE(start[1], start[5]); | |
| CE(start[2], start[8]); | |
| CE(start[3], start[7]); | |
| CE(start[6], start[9]); | |
| CE(start[10], start[12]); | |
| CE(start[11], start[13]); | |
| CE(start[0], start[7]); | |
| CE(start[1], start[6]); | |
| CE(start[2], start[9]); | |
| CE(start[4], start[10]); | |
| CE(start[5], start[11]); | |
| CE(start[8], start[13]); | |
| CE(start[12], start[14]); | |
| CE(start[0], start[6]); | |
| CE(start[2], start[4]); | |
| CE(start[3], start[5]); | |
| CE(start[7], start[11]); | |
| CE(start[8], start[10]); | |
| CE(start[9], start[12]); | |
| CE(start[13], start[14]); | |
| CE(start[0], start[3]); | |
| CE(start[1], start[2]); | |
| CE(start[4], start[7]); | |
| CE(start[5], start[9]); | |
| CE(start[6], start[8]); | |
| CE(start[10], start[11]); | |
| CE(start[12], start[13]); | |
| CE(start[0], start[1]); | |
| CE(start[2], start[3]); | |
| CE(start[4], start[6]); | |
| CE(start[7], start[9]); | |
| CE(start[10], start[12]); | |
| CE(start[11], start[13]); | |
| CE(start[1], start[2]); | |
| CE(start[3], start[5]); | |
| CE(start[8], start[10]); | |
| CE(start[11], start[12]); | |
| CE(start[3], start[4]); | |
| CE(start[5], start[6]); | |
| CE(start[7], start[8]); | |
| CE(start[9], start[10]); | |
| CE(start[2], start[3]); | |
| CE(start[4], start[5]); | |
| CE(start[6], start[7]); | |
| CE(start[8], start[9]); | |
| CE(start[10], start[11]); | |
| CE(start[5], start[6]); | |
| CE(start[7], start[8]); | |
| } | |
| void network16(int *start) { | |
| CE(start[0], start[13]); | |
| CE(start[1], start[12]); | |
| CE(start[2], start[15]); | |
| CE(start[3], start[14]); | |
| CE(start[4], start[8]); | |
| CE(start[5], start[6]); | |
| CE(start[7], start[11]); | |
| CE(start[9], start[10]); | |
| CE(start[0], start[5]); | |
| CE(start[1], start[7]); | |
| CE(start[2], start[9]); | |
| CE(start[3], start[4]); | |
| CE(start[6], start[13]); | |
| CE(start[8], start[14]); | |
| CE(start[10], start[15]); | |
| CE(start[11], start[12]); | |
| CE(start[0], start[1]); | |
| CE(start[2], start[3]); | |
| CE(start[4], start[5]); | |
| CE(start[6], start[8]); | |
| CE(start[7], start[9]); | |
| CE(start[10], start[11]); | |
| CE(start[12], start[13]); | |
| CE(start[14], start[15]); | |
| CE(start[0], start[2]); | |
| CE(start[1], start[3]); | |
| CE(start[4], start[10]); | |
| CE(start[5], start[11]); | |
| CE(start[6], start[7]); | |
| CE(start[8], start[9]); | |
| CE(start[12], start[14]); | |
| CE(start[13], start[15]); | |
| CE(start[1], start[2]); | |
| CE(start[3], start[12]); | |
| CE(start[4], start[6]); | |
| CE(start[5], start[7]); | |
| CE(start[8], start[10]); | |
| CE(start[9], start[11]); | |
| CE(start[13], start[14]); | |
| CE(start[1], start[4]); | |
| CE(start[2], start[6]); | |
| CE(start[5], start[8]); | |
| CE(start[7], start[10]); | |
| CE(start[9], start[13]); | |
| CE(start[11], start[14]); | |
| CE(start[2], start[4]); | |
| CE(start[3], start[6]); | |
| CE(start[9], start[12]); | |
| CE(start[11], start[13]); | |
| CE(start[3], start[5]); | |
| CE(start[6], start[8]); | |
| CE(start[7], start[9]); | |
| CE(start[10], start[12]); | |
| CE(start[3], start[4]); | |
| CE(start[5], start[6]); | |
| CE(start[7], start[8]); | |
| CE(start[9], start[10]); | |
| CE(start[11], start[12]); | |
| CE(start[6], start[7]); | |
| CE(start[8], start[9]); | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment