fork download
  1. #include <stdio.h>
  2. #include <inttypes.h>
  3. #include <string.h>
  4.  
  5. void uintprint4(uint32_t *a)
  6. {
  7. printf("%u %u %u %u\n", a[0], a[1], a[2], a[3]);
  8. }
  9.  
  10. void sort4(uint32_t a[static 4])
  11. {
  12. uint64_t mask = 0x6C6361E12D2724E4;
  13. uint8_t bits = ((a[0] <= a[1]) ) | ((a[1] <= a[2]) << 1) | ((a[2] <= a[3]) << 2)
  14. | ((a[0] <= a[2]) << 3) | ((a[1] <= a[3]) << 4) | ((a[0] <= a[3]) << 5);
  15. static const uint8_t b[] =
  16. {
  17. [0b000000] = 11,
  18. [0b000001] = 32,
  19. [0b000010] = 42,
  20. [0b000100] = 22,
  21. [0b000101] = 54,
  22. [0b001001] = 10,
  23. [0b001010] = 20,
  24. [0b001011] = 47,
  25. [0b010010] = 34,
  26. [0b010100] = 3,
  27. [0b010110] = 43,
  28. [0b011010] = 1,
  29. [0b100101] = 46,
  30. [0b101001] = 2,
  31. [0b101011] = 44,
  32. [0b101101] = 24,
  33. [0b110100] = 6,
  34. [0b110101] = 38,
  35. [0b110110] = 48,
  36. [0b111010] = 4,
  37. [0b111011] = 36,
  38. [0b111101] = 5,
  39. [0b111110] = 26,
  40. [0b111111] = 45,
  41. };
  42. mask >>= b[bits];
  43. uint32_t tmp[4] = {a[(mask>>6)&0b11], a[(mask>>4)&0b11], a[(mask>>2)&0b11], a[(mask)&0b11]};
  44. memcpy(a, tmp, 4*sizeof(uint32_t));
  45. }
  46.  
  47. int main(void)
  48. {
  49. uint32_t a[] = {0, 1, 2, 3};
  50. uint32_t b[] = {0, 1, 3, 2};
  51. uint32_t c[] = {0, 2, 1, 3};
  52. uint32_t d[] = {0, 2, 3, 1};
  53. uint32_t e[] = {0, 3, 1, 2};
  54. uint32_t f[] = {0, 3, 2, 1};
  55. uint32_t g[] = {1, 0, 2, 3};
  56. uint32_t h[] = {1, 0, 3, 2};
  57. uint32_t i[] = {1, 2, 0, 3};
  58. uint32_t j[] = {1, 2, 3, 0};
  59. uint32_t k[] = {1, 3, 0, 2};
  60. uint32_t l[] = {1, 3, 2, 0};
  61. uint32_t m[] = {2, 0, 1, 3};
  62. uint32_t n[] = {2, 0, 3, 1};
  63. uint32_t o[] = {2, 1, 0, 3};
  64. uint32_t p[] = {2, 1, 3, 0};
  65. uint32_t q[] = {2, 3, 0, 1};
  66. uint32_t r[] = {2, 3, 1, 0};
  67. uint32_t s[] = {3, 0, 1, 2};
  68. uint32_t t[] = {3, 0, 2, 1};
  69. uint32_t u[] = {3, 1, 0, 2};
  70. uint32_t v[] = {3, 1, 2, 0};
  71. uint32_t w[] = {3, 2, 0, 1};
  72. uint32_t x[] = {3, 2, 1, 0};
  73.  
  74. sort4(a); sort4(b); sort4(c); sort4(d); sort4(e); sort4(f);
  75. sort4(g); sort4(h); sort4(i); sort4(j); sort4(k); sort4(l);
  76. sort4(m); sort4(n); sort4(o); sort4(p); sort4(q); sort4(r);
  77. sort4(s); sort4(t); sort4(u); sort4(v); sort4(w); sort4(x);
  78.  
  79. uintprint4(a); uintprint4(b); uintprint4(c); uintprint4(d); uintprint4(e); uintprint4(f);
  80. uintprint4(g); uintprint4(h); uintprint4(i); uintprint4(j); uintprint4(k); uintprint4(l);
  81. uintprint4(m); uintprint4(n); uintprint4(o); uintprint4(p); uintprint4(q); uintprint4(r);
  82. uintprint4(s); uintprint4(t); uintprint4(u); uintprint4(v); uintprint4(w); uintprint4(x);
  83.  
  84. return 0;
  85. }
Success #stdin #stdout 0s 9432KB
stdin
Standard input is empty
stdout
0 1 2 3
0 1 2 3
0 1 2 3
0 1 2 3
0 1 2 3
0 1 2 3
0 1 2 3
0 1 2 3
0 1 2 3
0 1 2 3
0 1 2 3
0 1 2 3
0 1 2 3
0 1 2 3
0 1 2 3
0 1 2 3
0 1 2 3
0 1 2 3
0 1 2 3
0 1 2 3
0 1 2 3
0 1 2 3
0 1 2 3
0 1 2 3