给定学生的成绩单,成绩单中包含每个学生的学号和分数,请将成绩单按成绩从低到高的顺序重新排序。
如果学生的成绩相同,则按照学号从小到大的顺序进行排序。
输入格式
第一行包含整数 N
,表示学生数量。
接下来 N
行,每行包含两个整数 p
和 q
,表示一个学生的学号和成绩。
学生的学号各不相同。
输出格式
输出重新排序后的成绩单。
每行输出一个学生的学号和成绩,用单个空格隔开。
数据范围
1≤N≤100
,
1≤p≤100
,
0≤q≤100
输入样例:
3
1 90
2 87
3 92
输出样例:
2 87
1 90
3 92
算法1
(快速排序模板)
``
include[HTML_REMOVED]
using namespace std;
const int N=1e6+10;
int n;
int q[N][2];
void quicksort(int q[][2],int l,int r)
{
if(l>=r)return;
int x=q[(l+r+1)/2][0];
int y=q[(l+r+1)/2][1];
int i=l-1,j=r+1;
while(i[HTML_REMOVED]y||q[j][1]==y&&q[j][0]>x);
if(i<j)
{
swap(q[i][0],q[j][0]);
swap(q[i][1],q[j][1]);
}
}
quicksort(q,l,i-1);
quicksort(q,i,r);
}
int main()
{
scanf(“%d”,&n);
for(int i=0;i<n;i)
{
scanf(“%d %d”,&q[i][0],&q[i][1]);
}
quicksort(q,0,n-1);
for(int i=0;i<n;i)
{
printf(“%d %d \n”,q[i][0],q[i][1]);
}
return 0;
}``