成绩排序
题目描述
查找和排序
题目:输入任意(用户,成绩)序列,可以获得成绩从高到低或从低到高的排列,相同成绩
都按先录入排列在前的规则处理。
例示:
jack 70
peter 96
Tom 70
smith 67
从高到低 成绩
peter 96
jack 70
Tom 70
smith 67
从低到高
smith 67
Tom 70
jack 70
peter 96
输入描述:
输入多行,先输入要排序的人的个数,然后分别输入他们的名字和成绩,以一个空格隔开
输出描述:
按照指定方式输出名字和成绩,名字和成绩之间以一个空格隔开
输入例子:
3
0
fang 90
yang 50
ning 70
输出例子:
fang 90
ning 70
yang 50
解答代码:
#include<iostream>
#include<string>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<fstream>
#define N 1024
using namespace std;
typedef struct node
{
string name;
float score;
} STU;
void IncByScore(STU student[],int len)
{
int i,j;
for(i=0; i<len-1; i++)
{
for(j=0; j<len-1-i; j++)
{
if(student[j+1].score < student[j].score)
{
STU temp=student[j+1];
student[j+1]=student[j];
student[j]=temp;
}
}
}
}
void DecByScore(STU student[],int len)
{
int i,j;
for(i=0; i<len-1; i++)
{
for(j=0; j<len-1-i; j++)
{
if(student[j+1].score > student[j].score)
{
STU temp=student[j+1];
student[j+1]=student[j];
student[j]=temp;
}
}
}
}
int main()
{
int len=0,order=0;
STU student[N];
//freopen("1.txt","r",stdin);
while(cin >> len >>order)
{
for(int i=0; i<len; i++)
{
cin>>student[i].name>>student[i].score;
}
int j=0;
if(order==0)
DecByScore(student,len);
if(order==1)
IncByScore(student,len);
//输出
for(j=0; j<len; j++)
cout<<student[j].name<<" "<<student[j].score<<endl;
}
}