już prawie dobrze, choć było by lepiej zamiast:
int compare(const void *v1, const void *v2) {
Point *p1 = (Point*)(v1);
Point *p2 = (Point*)(v2);
if(sqrt(p1->x*p1->x + p1->y*p1->y) < sqrt(p2->x*p2->x + p2->x*p2->y)) return -1;
if(sqrt(p1->x*p1->x + p1->y*p1->y) > sqrt(p2->x*p2->x + p2->x*p2->y)) return 1;
else return 0;
}
napisać znacznie prościej (bo sqrt jest niepotrzebny, a dwa razy liczyć też nie trzeba):
int compare(const void *v1, const void *v2) {
Point *p1 = (Point*)(v1);
Point *p2 = (Point*)(v2);
int d = (p1->x*p1->x + p1->y*p1->y) - (p2->x*p2->x + p2->y*p2->y);
return d;
}
a jeszcze lepiej dodać do struktury d i wyliczać po wczytaniu x i y, wtedy funkcja porównująca jest jeszcze prostsza.