Test Message

a915: 二維點排序

內容

給你 n 個二維平面上的點,要求你把他們按照以 x 軸坐標為第一關鍵字,y 軸坐標為第二關鍵字的方式從小到大來進行排序。


輸入

第一行輸入一個正整數 n。
接下來 n 行,第 i 行有兩個個以空格隔開的正整數 x[i]和 y[i],表示第 i 個點為(x[i],y[i])。

4
2 4
1 2
3 4
2 3

輸出

輸出 n 行,第 i 行表示排序好後第 i 個點的坐標。

1 2
2 3
2 4
3 4


解題思路

簡單的條件判斷和排序。


完整程式碼

AC (2ms, 112KB)
#include <stdio.h>
#include <stdlib.h>
#define MAX 1000

typedef struct node
{
int x, y;
}Point;

Point list[MAX], * sort[MAX];

int cmp(const Point** lhs, const Point** rhs)
{
return (*lhs)->x == (*rhs)->x ? (*lhs)->y - (*rhs)->y : (*lhs)->x - (*rhs)->x;
}

int main()
{
for (int i = 0; i < MAX; i++)
sort[i] = &list[i];
int n;
while (scanf(" %d", &n) == 1)
{
for (int i = 0; i < n; i++)
scanf(" %d %d", &list[i].x, &list[i].y);
qsort(sort, n, sizeof(Point*), cmp);
for (int i = 0; i < n; i++)
printf("%d %d\n", sort[i]->x, sort[i]->y);
}
return 0;
}