问题描述: 查找和排序
题目:输入任意(用户,成绩)序列,可以获得成绩从高到低或从低到高的排列,相同成绩都按先录入排列在前的规则处理。
例示:
jack 70
peter 96
Tom 70
smith 67
从高到低 成绩
peter 96
jack 70
Tom 70
smith 67
从低到高
smith 67
Tom 70
jack 70
peter 96
知识点: 排序
题目来源: 内部整理
练习阶段: 中级
运行时间限制: 10Sec
内存限制: 128MByte
输入:
输入多行,先输入要排序的人的个数,然后分别输入他们的名字和成绩,以一个空格隔开
用户名字,字符串,非空串,长度不超过20;
成绩,整数,范围【0,100】
输入排序方式,0或1,0表示成绩从高到低方式输出名字和成绩,1表示成绩从低到高方式输出名字和成绩
输出:
按照指定方式输出名字和成绩,名字和成绩之间以一个空格隔开
样例输入: 3
0
fang 90
yang 50
ning 70
样例输出: fang 90
ning 70
yang 50
问题分析:结构体+冒泡排序
#include <iostream>
#include <string>
#include <vector>
using namespace std;
typedef struct student
{
string name;
int score;
}student;
int n;
void sort(vector<student>& s, int k);
int main()
{
int k;
cin>>n>>k;//输入录用人数和排序方式,0降序,1升序
vector<student> s;//vector向量容器,存放student类型
//成绩录入
int i=0;
student temp;
for(i=0;i<n;i++)
{
cin>>temp.name>>temp.score;
s.push_back(temp);
}
sort(s,k);//排序
//打印输出排序后的成绩
for(i=0;i<n;i++)
{
cout<<s[i].name<<" "<<s[i].score<<endl;
}
return 0;
}
void sort(vector<student>& s, int k)
{
int i=0,j=0;
string tempStr;
int tempscore;
for(i=0;i<n-1;i++)
{
for(j=0;j<n-1-i;j++)
{
if(0==k)
{
if(s[j].score<s[j+1].score)
{
tempscore=s[j+1].score;
s[j+1].score=s[j].score;
s[j].score=tempscore;
tempStr=s[j].name;
s[j].name=s[j+1].name;
s[j+1].name=tempStr;
}
}
else
{
if(s[j].score>s[j+1].score)
{
tempscore=s[j].score;
s[j].score=s[j+1].score;
s[j+1].score=tempscore;
tempStr=s[j].name;
s[j].name=s[j+1].name;
s[j+1].name=tempStr;
}
}
}
}
}
代码2:
#include <iostream>
#include <string>
#include <vector>
using namespace std;
typedef struct stusco
{
string name;
int score;
}stusco;
void sort(vector<stusco> &s,int n, int method)
{
string tempname;
int tempscore;
int i=0,j=0;
//默认从低排序到高
for(i=0;i<n;i++)
{
for(j=0;j<n-i-1;j++)
{
if(s[j].score>s[j+1].score)
{
tempname=s[j].name;
tempscore=s[j].score;
s[j].name=s[j+1].name;
s[j].score=s[j+1].score;
s[j+1].name=tempname;
s[j+1].score=tempscore;
}
}
}
if(method==1)//从低到高
{
for(i=0;i<n;i++)
cout<<s[i].name<<" "<<s[i].score<<endl;
}
else//从高到低
{
for(i=n-1;i>=0;i--)
cout<<s[i].name<<" "<<s[i].score<<endl;
}
}
int main()
{
int n;
int method;
cin>>n>>method;
int i=0;
vector<stusco> s;
stusco student;
for(i=0;i<n;i++)
{
cin>>student.name>>student.score;
s.push_back(student);
}
sort(s,n,method);
return 0;
}