#include <stdio.h>
#include <stdlib.h>
struct ai {int *a, len, cap;};
struct api {int **a, len, cap;};
void println(struct ai a) {
int i;
for (i = 0; i < a.len; i++) {
printf(i
== 0 ? "%d" : ", %d", a.
a[i
]); }
}
int comppi(const void *a, const void *b) {
return **(int **)a - **(int **)b;
}
struct ai sorti(struct ai a) {
static struct api b = {0, 0, 0};
int i;
if (b.cap < a.len) {
b.cap = a.len * 2;
b.
a = malloc(sizeof *b.
a * b.
cap); }
for (b.len = a.len, i = 0; i < b.len; i++) b.a[i] = a.a + i;
qsort(b.
a, b.
len, sizeof *b.
a, comppi
); for (i = 0; i < b.len; i++) a.a[i] = b.a[i] - a.a;
return a;
}
struct ai f(struct ai a) {
return sorti(sorti(a));
}
int main(void) {
println(f((struct ai){(int[]){1,100,10,10000,1000}, 5}));
println(f((struct ai){(int[]){3,1,4,1,5,9,2}, 7}));
println(f((struct ai){(int[]){0,1,0,1,0,1,0,1}, 8}));
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4Kc3RydWN0IGFpIHtpbnQgKmEsIGxlbiwgY2FwO307CnN0cnVjdCBhcGkge2ludCAqKmEsIGxlbiwgY2FwO307CnZvaWQgcHJpbnRsbihzdHJ1Y3QgYWkgYSkgewoJaW50IGk7CglwdXRjaGFyKCdbJyk7Cglmb3IgKGkgPSAwOyBpIDwgYS5sZW47IGkrKykgewoJCXByaW50ZihpID09IDAgPyAiJWQiIDogIiwgJWQiLCBhLmFbaV0pOwoJfQoJcHV0cygiXSIpOwp9CmludCBjb21wcGkoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYikgewogICAgcmV0dXJuICoqKGludCAqKilhIC0gKiooaW50ICoqKWI7ICAKfQpzdHJ1Y3QgYWkgc29ydGkoc3RydWN0IGFpIGEpIHsKCXN0YXRpYyBzdHJ1Y3QgYXBpIGIgPSB7MCwgMCwgMH07CglpbnQgaTsKCWlmIChiLmNhcCA8IGEubGVuKSB7CgkJZnJlZShiLmEpOwoJCWIuY2FwID0gYS5sZW4gKiAyOwoJCWIuYSA9IG1hbGxvYyhzaXplb2YgKmIuYSAqIGIuY2FwKTsKCX0KCWZvciAoYi5sZW4gPSBhLmxlbiwgaSA9IDA7IGkgPCBiLmxlbjsgaSsrKSBiLmFbaV0gPSBhLmEgKyBpOwoJcXNvcnQoYi5hLCBiLmxlbiwgc2l6ZW9mICpiLmEsIGNvbXBwaSk7Cglmb3IgKGkgPSAwOyBpIDwgYi5sZW47IGkrKykgYS5hW2ldID0gYi5hW2ldIC0gYS5hOwoJcmV0dXJuIGE7Cn0Kc3RydWN0IGFpIGYoc3RydWN0IGFpIGEpIHsKCXJldHVybiBzb3J0aShzb3J0aShhKSk7Cn0KaW50IG1haW4odm9pZCkgewoJcHJpbnRsbihmKChzdHJ1Y3QgYWkpeyhpbnRbXSl7MSwxMDAsMTAsMTAwMDAsMTAwMH0sIDV9KSk7CglwcmludGxuKGYoKHN0cnVjdCBhaSl7KGludFtdKXszLDEsNCwxLDUsOSwyfSwgN30pKTsKCXByaW50bG4oZigoc3RydWN0IGFpKXsoaW50W10pezAsMSwwLDEsMCwxLDAsMX0sIDh9KSk7CglyZXR1cm4gMDsKfQo=
[0, 2, 1, 4, 3]
[3, 0, 4, 1, 5, 6, 2]
[0, 4, 1, 5, 2, 6, 3, 7]