fork download
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. struct ai {int *a, len, cap;};
  4. struct api {int **a, len, cap;};
  5. void println(struct ai a) {
  6. int i;
  7. putchar('[');
  8. for (i = 0; i < a.len; i++) {
  9. printf(i == 0 ? "%d" : ", %d", a.a[i]);
  10. }
  11. puts("]");
  12. }
  13. int comppi(const void *a, const void *b) {
  14. return **(int **)a - **(int **)b;
  15. }
  16. struct ai sorti(struct ai a) {
  17. static struct api b = {0, 0, 0};
  18. int i;
  19. if (b.cap < a.len) {
  20. free(b.a);
  21. b.cap = a.len * 2;
  22. b.a = malloc(sizeof *b.a * b.cap);
  23. }
  24. for (b.len = a.len, i = 0; i < b.len; i++) b.a[i] = a.a + i;
  25. qsort(b.a, b.len, sizeof *b.a, comppi);
  26. for (i = 0; i < b.len; i++) a.a[i] = b.a[i] - a.a;
  27. return a;
  28. }
  29. struct ai f(struct ai a) {
  30. return sorti(sorti(a));
  31. }
  32. int main(void) {
  33. println(f((struct ai){(int[]){1,100,10,10000,1000}, 5}));
  34. println(f((struct ai){(int[]){3,1,4,1,5,9,2}, 7}));
  35. println(f((struct ai){(int[]){0,1,0,1,0,1,0,1}, 8}));
  36. return 0;
  37. }
  38.  
Success #stdin #stdout 0.01s 5320KB
stdin
Standard input is empty
stdout
[0, 2, 1, 4, 3]
[3, 0, 4, 1, 5, 6, 2]
[0, 4, 1, 5, 2, 6, 3, 7]