Input:
第一行,a、b两个链表元素的数量N、M,用空格隔开。 接下来N行是a的数据 然后M行是b的数据 每行数据由学号和成绩两部分组成
Output:
按照学号升序排列的数据
Sample Input:
2 3 5 100 6 89 3 82 4 95 2 10
Sample Output:
2 10 3 82 4 95 5 100 6 89
解题思路:
1、用两个for循环来给两个链表由小到大排序
for(i=0;i<m+n,i++)
{
for(j=i+1;j<m+n;j++)
{
if(s[i].num>s[j].num)
{
t=s[j];
s[j]=s[i];
s[i]=t;
}
}
}
2、使用冒泡排序,使数列由小到大
for(i=1;i<m+n;i++)
{
for(j=0;j<m+n-i;j++)
{
if(s[j].num>s[j+1].num)
{
t=s[j+1];
s[j+1]=s[j];
s[j]=t;
}
}
}
完整代码:
#include <stdio.h> struct Student{ int num; int score; }; void main() { int i,j,m,n; scanf("%d%d",&n,&m); struct Student s[m+n],t; for(i=0;i<m+n;i++) { scanf("%d %d",&s[i].num,&s[i].score); } for(i=0;i<m+n;i++) { for(j=i+1;j<m+n;j++) { if(s[i].num>s[j].num) { t=s[j]; s[j]=s[i]; s[i]=t; } } } for(i=0;i<m+n;i++) { printf("%d %d\n",s[i].num,s[i].score); } }