#include <stdio.h>
#include <math.h>
typedef struct Point { int x,y; } Point;
typedef int CMP(const void *a,const void *b);
int cmpA(const Point *a,const Point *b)
{
double A=hypot(a->x,a->y),B=hypot(b->x,b->y);
return ((A)>(B))-((A)<(B));
}
int cmpB(const Point *a,const Point *b)
{
return ((a->y)>(b->y))-((a->y)<(b->y));
}
int cmpC(const Point *a,const Point *b)
{
return ((a->x)>(b->x))-((a->x)<(b->x));
}
int main()
{
Point p[4]={{500,662},{921,660},{495,149},{839,421}};
qsort(p
+0,4,sizeof(Point
),(CMP
*)&cmpA
); qsort(p
+1,3,sizeof(Point
),(CMP
*)&cmpB
); qsort(p
+2,2,sizeof(Point
),(CMP
*)&cmpC
); for(size_t i
=0;i
<4;++i
) printf("(%d,%d)\n",p
[i
].
x,p
[i
].
y); return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxtYXRoLmg+Cgp0eXBlZGVmIHN0cnVjdCBQb2ludCB7IGludCB4LHk7IH0gUG9pbnQ7CnR5cGVkZWYgaW50IENNUChjb25zdCB2b2lkICphLGNvbnN0IHZvaWQgKmIpOwoKaW50IGNtcEEoY29uc3QgUG9pbnQgKmEsY29uc3QgUG9pbnQgKmIpCiAgewogICBkb3VibGUgQT1oeXBvdChhLT54LGEtPnkpLEI9aHlwb3QoYi0+eCxiLT55KTsKICAgcmV0dXJuICgoQSk+KEIpKS0oKEEpPChCKSk7CiAgfQoKaW50IGNtcEIoY29uc3QgUG9pbnQgKmEsY29uc3QgUG9pbnQgKmIpCiAgewogICByZXR1cm4gICgoYS0+eSk+KGItPnkpKS0oKGEtPnkpPChiLT55KSk7CiAgfQogIAppbnQgY21wQyhjb25zdCBQb2ludCAqYSxjb25zdCBQb2ludCAqYikKICB7CiAgIHJldHVybiAoKGEtPngpPihiLT54KSktKChhLT54KTwoYi0+eCkpOwogIH0KICAKaW50IG1haW4oKQogIHsKICAgUG9pbnQgcFs0XT17ezUwMCw2NjJ9LHs5MjEsNjYwfSx7NDk1LDE0OX0sezgzOSw0MjF9fTsKICAgcXNvcnQocCswLDQsc2l6ZW9mKFBvaW50KSwoQ01QKikmY21wQSk7CiAgIHFzb3J0KHArMSwzLHNpemVvZihQb2ludCksKENNUCopJmNtcEIpOwogICBxc29ydChwKzIsMixzaXplb2YoUG9pbnQpLChDTVAqKSZjbXBDKTsKICAgZm9yKHNpemVfdCBpPTA7aTw0OysraSkgcHJpbnRmKCIoJWQsJWQpXG4iLHBbaV0ueCxwW2ldLnkpOwogICByZXR1cm4gMDsKICB9