fork download
  1. #include <stdio.h>
  2. #include <inttypes.h>
  3. #include <string.h>
  4.  
  5. void uintprint3(uint32_t *a)
  6. {
  7. printf("%u %u %u\n", a[0], a[1], a[2]);
  8. }
  9.  
  10. void sort3(uint32_t a[static 3])
  11. {
  12. uint16_t mask = 0x6124;
  13. uint8_t bits = (a[0] <= a[1]) | ((a[1] <= a[2]) << 1) | ((a[0] <= a[2]) << 2);
  14. static const uint8_t b[] =
  15. {
  16. [0b000] = 3, // =0
  17. [0b001] = 8,
  18. [0b010] = 10,
  19. [0b101] = 2, // =5
  20. [0b110] = 1, // =4
  21. [0b111] = 12,
  22. };
  23. mask >>= b[bits];
  24. uint32_t tmp[3] = {a[(mask>>4)&0b11], a[(mask>>2)&0b11], a[(mask)&0b11]};
  25. memcpy(a, tmp, 3*sizeof(uint32_t));
  26. }
  27.  
  28. int main(void)
  29. {
  30. uint32_t a[] = {0, 1, 2};
  31. uint32_t b[] = {0, 2, 1};
  32. uint32_t c[] = {1, 2, 0};
  33. uint32_t d[] = {1, 0, 2};
  34. uint32_t e[] = {2, 0, 1};
  35. uint32_t f[] = {2, 1, 0};
  36. sort3(a); sort3(b); sort3(c); sort3(d); sort3(e); sort3(f);
  37.  
  38. uintprint3(a);
  39. uintprint3(b);
  40. uintprint3(c);
  41. uintprint3(d);
  42. uintprint3(e);
  43. uintprint3(f);
  44. return 0;
  45. }
  46.  
Success #stdin #stdout 0s 9424KB
stdin
Standard input is empty
stdout
0 1 2
0 1 2
0 1 2
0 1 2
0 1 2
0 1 2