#include
struct zuobiao{
int heng;
int shu;
int b; //用于存放a[i].heng*a[i].heng + a[i].shu*a[i].shu的结果
};
void swap(struct zuobiao *a, struct zuobiao *a1)
{
struct zuobiao temp;
temp.heng = (*a).heng;
temp.shu = (*a).shu;
temp.b = (*a).b;
(*a).heng = (*a1).heng;
(*a).shu = (*a1).shu;
(*a).b = (*a1).b;
(*a1).heng = temp.heng;
(*a1).shu = temp.shu;
(*a1).b = temp.b;
}
void sort(struct zuobiao a[], int n)
{
for (int i = 0; i < n - 1; i++)
{
for (int j = 0; j < n - 1 - i; j++)
{
if (a[j].b > a[j + 1].b)
{
swap(&a[j],&a[j+1]);
}
}
}
for (int i = 0; i < n - 1; i++)
{
for (int j = 0; j < n - 1 - i; j++)
{
if (a[j].b == a[j + 1].b)
{
if ((a[j].heng<0 && a[j].shu>0)) //4象限
swap(&a[j], &a[j + 1]);
else if ((a[j].heng<0 && a[j].shu<0) && ((a[j + 1].heng>0 && a[j + 1].shu>0) || (a[j + 1].heng>0 && a[j + 1].shu<0))) //3象限
swap(&a[j], &a[j + 1]);
else if ((a[j].heng>0 && a[j].shu<0) && (a[j + 1].heng>0 && a[j + 1].shu>0)) //2象限
swap(&a[j], &a[j + 1]);
}
}
}
}
int main(void)
{
struct zuobiao a[100] = { 0 };
int k = 0;
int n = 0;
printf("请输入点的个数:");
scanf("%d", &n);
getchar();
printf("输出距离原点最近的点的个数:");
scanf("%d", &k);
getchar();
for (int i = 0; i < n; i++)
{
printf("请输入点的横坐标和纵坐标:");
scanf("%d%d", &a[i].heng, &a[i].shu);
getchar();
a[i].b = a[i].heng*a[i].heng + a[i].shu*a[i].shu;
}
sort(a,n);
for (int j = 0; j < k; j++)
printf("%d %d\n", a[j].heng, a[j].shu);
return 0;
}
我是用C语言写的,冒泡排序,写的不好,勉强能用