fork download
  1. #include <stdio.h>
  2. #include <inttypes.h>
  3. #include <string.h>
  4.  
  5. void uintprint5(uint32_t *a)
  6. {
  7. printf("%u %u %u %u %u\n", a[0], a[1], a[2], a[3], a[4]);
  8. }
  9.  
  10.  
  11. void sort2(uint32_t *a, uint32_t *b)
  12. {
  13. uint32_t tmp[3] = {*a, *b, *a};
  14. uint8_t bits = (*a > *b);
  15. *a = tmp[0 + bits];
  16. *b = tmp[1 + bits];
  17. }
  18.  
  19. void sort3(uint32_t a[static 3])
  20. {
  21. uint16_t mask = 0x6124;
  22. uint8_t bits = (a[0] <= a[1]) | ((a[1] <= a[2]) << 1) | ((a[0] <= a[2]) << 2);
  23. static const uint8_t b[] =
  24. {
  25. [0b000] = 3, // =0
  26. [0b001] = 8,
  27. [0b010] = 10,
  28. [0b101] = 2, // =5
  29. [0b110] = 1, // =4
  30. [0b111] = 12,
  31. };
  32. mask >>= b[bits];
  33. uint32_t tmp[3] = {a[(mask>>4)&0b11], a[(mask>>2)&0b11], a[(mask)&0b11]};
  34. memcpy(a, tmp, 3*sizeof(uint32_t));
  35. }
  36.  
  37. void sort5(uint32_t a[static 5])
  38. {
  39. sort3(a + 0); sort2(a + 3, a + 4);
  40. sort2(a + 0, a + 4); sort2(a + 1, a + 3);
  41. sort2(a + 0, a + 1); sort3(a + 2);
  42. }
  43.  
  44. int main(void)
  45. {
  46. uint32_t a[][5] = {
  47. {0, 1, 2, 3, 4},
  48. {0, 1, 2, 4, 3},
  49. {0, 1, 3, 2, 4},
  50. {0, 1, 3, 4, 2},
  51. {0, 1, 4, 2, 3},
  52. {0, 1, 4, 3, 2},
  53. {0, 2, 1, 3, 4},
  54. {0, 2, 1, 4, 3},
  55. {0, 2, 3, 1, 4},
  56. {0, 2, 3, 4, 1},
  57. {0, 2, 4, 1, 3},
  58. {0, 2, 4, 3, 1},
  59. {0, 3, 1, 2, 4},
  60. {0, 3, 1, 4, 2},
  61. {0, 3, 2, 1, 4},
  62. {0, 3, 2, 4, 1},
  63. {0, 3, 4, 1, 2},
  64. {0, 3, 4, 2, 1},
  65. {0, 4, 1, 2, 3},
  66. {0, 4, 1, 3, 2},
  67. {0, 4, 2, 1, 3},
  68. {0, 4, 2, 3, 1},
  69. {0, 4, 3, 1, 2},
  70. {0, 4, 3, 2, 1},
  71. {1, 0, 2, 3, 4},
  72. {1, 0, 2, 4, 3},
  73. {1, 0, 3, 2, 4},
  74. {1, 0, 3, 4, 2},
  75. {1, 0, 4, 2, 3},
  76. {1, 0, 4, 3, 2},
  77. {1, 2, 0, 3, 4},
  78. {1, 2, 0, 4, 3},
  79. {1, 2, 3, 0, 4},
  80. {1, 2, 3, 4, 0},
  81. {1, 2, 4, 0, 3},
  82. {1, 2, 4, 3, 0},
  83. {1, 3, 0, 2, 4},
  84. {1, 3, 0, 4, 2},
  85. {1, 3, 2, 0, 4},
  86. {1, 3, 2, 4, 0},
  87. {1, 3, 4, 0, 2},
  88. {1, 3, 4, 2, 0},
  89. {1, 4, 0, 2, 3},
  90. {1, 4, 0, 3, 2},
  91. {1, 4, 2, 0, 3},
  92. {1, 4, 2, 3, 0},
  93. {1, 4, 3, 0, 2},
  94. {1, 4, 3, 2, 0},
  95. {2, 0, 1, 3, 4},
  96. {2, 0, 1, 4, 3},
  97. {2, 0, 3, 1, 4},
  98. {2, 0, 3, 4, 1},
  99. {2, 0, 4, 1, 3},
  100. {2, 0, 4, 3, 1},
  101. {2, 1, 0, 3, 4},
  102. {2, 1, 0, 4, 3},
  103. {2, 1, 3, 0, 4},
  104. {2, 1, 3, 4, 0},
  105. {2, 1, 4, 0, 3},
  106. {2, 1, 4, 3, 0},
  107. {2, 3, 0, 1, 4},
  108. {2, 3, 0, 4, 1},
  109. {2, 3, 1, 0, 4},
  110. {2, 3, 1, 4, 0},
  111. {2, 3, 4, 0, 1},
  112. {2, 3, 4, 1, 0},
  113. {2, 4, 0, 1, 3},
  114. {2, 4, 0, 3, 1},
  115. {2, 4, 1, 0, 3},
  116. {2, 4, 1, 3, 0},
  117. {2, 4, 3, 0, 1},
  118. {2, 4, 3, 1, 0},
  119. {3, 0, 1, 2, 4},
  120. {3, 0, 1, 4, 2},
  121. {3, 0, 2, 1, 4},
  122. {3, 0, 2, 4, 1},
  123. {3, 0, 4, 1, 2},
  124. {3, 0, 4, 2, 1},
  125. {3, 1, 0, 2, 4},
  126. {3, 1, 0, 4, 2},
  127. {3, 1, 2, 0, 4},
  128. {3, 1, 2, 4, 0},
  129. {3, 1, 4, 0, 2},
  130. {3, 1, 4, 2, 0},
  131. {3, 2, 0, 1, 4},
  132. {3, 2, 0, 4, 1},
  133. {3, 2, 1, 0, 4},
  134. {3, 2, 1, 4, 0},
  135. {3, 2, 4, 0, 1},
  136. {3, 2, 4, 1, 0},
  137. {3, 4, 0, 1, 2},
  138. {3, 4, 0, 2, 1},
  139. {3, 4, 1, 0, 2},
  140. {3, 4, 1, 2, 0},
  141. {3, 4, 2, 0, 1},
  142. {3, 4, 2, 1, 0},
  143. {4, 0, 1, 2, 3},
  144. {4, 0, 1, 3, 2},
  145. {4, 0, 2, 1, 3},
  146. {4, 0, 2, 3, 1},
  147. {4, 0, 3, 1, 2},
  148. {4, 0, 3, 2, 1},
  149. {4, 1, 0, 2, 3},
  150. {4, 1, 0, 3, 2},
  151. {4, 1, 2, 0, 3},
  152. {4, 1, 2, 3, 0},
  153. {4, 1, 3, 0, 2},
  154. {4, 1, 3, 2, 0},
  155. {4, 2, 0, 1, 3},
  156. {4, 2, 0, 3, 1},
  157. {4, 2, 1, 0, 3},
  158. {4, 2, 1, 3, 0},
  159. {4, 2, 3, 0, 1},
  160. {4, 2, 3, 1, 0},
  161. {4, 3, 0, 1, 2},
  162. {4, 3, 0, 2, 1},
  163. {4, 3, 1, 0, 2},
  164. {4, 3, 1, 2, 0},
  165. {4, 3, 2, 0, 1},
  166. {4, 3, 2, 1, 0},
  167. };
  168.  
  169. for(int i = 0; i < 120; ++i) {
  170. sort5(a[i]);
  171. uintprint5(a[i]);
  172. }
  173.  
  174. return 0;
  175. }
  176.  
Success #stdin #stdout 0s 9432KB
stdin
Standard input is empty
stdout
0 1 2 3 4
0 1 2 3 4
0 1 2 3 4
0 1 2 3 4
0 1 2 3 4
0 1 2 3 4
0 1 2 3 4
0 1 2 3 4
0 1 2 3 4
0 1 2 3 4
0 1 2 3 4
0 1 2 3 4
0 1 2 3 4
0 1 2 3 4
0 1 2 3 4
0 1 2 3 4
0 1 2 3 4
0 1 2 3 4
0 1 2 3 4
0 1 2 3 4
0 1 2 3 4
0 1 2 3 4
0 1 2 3 4
0 1 2 3 4
0 1 2 3 4
0 1 2 3 4
0 1 2 3 4
0 1 2 3 4
0 1 2 3 4
0 1 2 3 4
0 1 2 3 4
0 1 2 3 4
0 1 2 3 4
0 1 2 3 4
0 1 2 3 4
0 1 2 3 4
0 1 2 3 4
0 1 2 3 4
0 1 2 3 4
0 1 2 3 4
0 1 2 3 4
0 1 2 3 4
0 1 2 3 4
0 1 2 3 4
0 1 2 3 4
0 1 2 3 4
0 1 2 3 4
0 1 2 3 4
0 1 2 3 4
0 1 2 3 4
0 1 2 3 4
0 1 2 3 4
0 1 2 3 4
0 1 2 3 4
0 1 2 3 4
0 1 2 3 4
0 1 2 3 4
0 1 2 3 4
0 1 2 3 4
0 1 2 3 4
0 1 2 3 4
0 1 2 3 4
0 1 2 3 4
0 1 2 3 4
0 1 2 3 4
0 1 2 3 4
0 1 2 3 4
0 1 2 3 4
0 1 2 3 4
0 1 2 3 4
0 1 2 3 4
0 1 2 3 4
0 1 2 3 4
0 1 2 3 4
0 1 2 3 4
0 1 2 3 4
0 1 2 3 4
0 1 2 3 4
0 1 2 3 4
0 1 2 3 4
0 1 2 3 4
0 1 2 3 4
0 1 2 3 4
0 1 2 3 4
0 1 2 3 4
0 1 2 3 4
0 1 2 3 4
0 1 2 3 4
0 1 2 3 4
0 1 2 3 4
0 1 2 3 4
0 1 2 3 4
0 1 2 3 4
0 1 2 3 4
0 1 2 3 4
0 1 2 3 4
0 1 2 3 4
0 1 2 3 4
0 1 2 3 4
0 1 2 3 4
0 1 2 3 4
0 1 2 3 4
0 1 2 3 4
0 1 2 3 4
0 1 2 3 4
0 1 2 3 4
0 1 2 3 4
0 1 2 3 4
0 1 2 3 4
0 1 2 3 4
0 1 2 3 4
0 1 2 3 4
0 1 2 3 4
0 1 2 3 4
0 1 2 3 4
0 1 2 3 4
0 1 2 3 4
0 1 2 3 4
0 1 2 3 4
0 1 2 3 4