按坐标排序(结构体)

题目描述

平面上有n个点,坐标均为整数。横坐标相同时按纵坐标排序,否则按横坐标排序。本题要求用结构体存储坐标,再进行排序。先升序排序输出,再降序排序输出,可以自己写排序函数,也可以用qsort库函数排序。

输入

输入有两行,第一行是整数n(1<=n<=100),表示下一行有n对整数(每对整数对应一个点)输入,每个数据后有一个空格。

输出

输出有两行,即排序后的点,格式为(u,v),每个点后有一个空格。第一行升序排序结果,第二行降序排序结果。

样例输入
4
1 3
2 5
1 4
4 1

#include<stdio.h>
struct dian
{
int x;
int y;
}a[105],b[105],t;
int shengxu(struct dian a[105],struct dian t,int n);
int jiangxu(struct dian b[105],struct dian t,int n);
int main()
{
int n,i;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
scanf("%d%d",&a[i].x,&a[i].y);
b[i].x=a[i].x;
b[i].y=a[i].y;
}

shengxu(a,t,n);
jiangxu(b,t,n);
for(i=1;i<=n;i++)
{
	printf("(%d,%d) ",a[i].x,a[i].y);
}
printf("\n");
for(i=1;i<=n;i++)
{
	printf("(%d,%d) ",b[i].x,b[i].y);
}

}
int shengxu(struct dian a[105],struct dian t,int n)
{
int i,j;
for(i=1;i<=n;i++)
{
for(j=i+1;j<=n;j++)
{
if(a[j].x<a[i].x)
{
t=a[j];
a[j]=a[i];
a[i]=t;
}
else if(a[j].x>a[i].x)
continue;
else if(a[j].xa[i].x)
{
if(a[j].y<a[i].y)
{
t=a[j];
a[j]=a[i];
a[i]=t;
}
else if(a[j].y>a[i].y)
continue;
}
}
}
}
int jiangxu(struct dian b[105],struct dian t,int n)
{
int i,j;
for(i=1;i<=n;i++)
{
for(j=i+1;j<=n;j++)
{
if(b[j].x>b[i].x)
{
t=b[j];
b[j]=b[i];
b[i]=t;
}
else if(b[j].x<b[i].x)
continue;
else if(b[j].x
b[i].x)
{
if(b[j].y>b[i].y)
{
t=b[j];
b[j]=b[i];
b[i]=t;
}
else if(b[j].y<b[i].y)
continue;
}
}
}
}

样例输出
(1,3) (1,4) (2,5) (4,1)
(4,1) (2,5) (1,4) (1,3)

猜你喜欢

转载自blog.csdn.net/weixin_44373494/article/details/90229334