查找和排序
题目:输入任意(用户,成绩)序列,可以获得成绩从高到低或从低到高的排列,相同成绩
都按先录入排列在前的规则处理。
例示:
jack 70
peter 96
Tom 70
smith 67
从高到低 成绩
peter 96
jack 70
Tom 70
smith 67
从低到高
smith 67
Tom 70
jack 70
peter 96
输入描述:
输入多行,先输入要排序的人的个数,然后输入排序方法0(降序)或者1(升序)再分别输入他们的名字和成绩,以一个空格隔开
输出描述:
按照指定方式输出名字和成绩,名字和成绩之间以一个空格隔开
示例1
输入
3 0 fang 90 yang 50 ning 70
输出
fang 90 ning 70 yang 50
代码:#include<iostream> #include<string.h> using namespace std; struct student { string name; int grade; int status;//同样的分数 先输入学生的status 大 }; void sortbygrade(student *s,int count,bool flag) { student temp; for(int i=0;i<count;i++) { for(int j=i+1;j<count;j++) { if(flag==false) //降序排序 { if(s[i].grade<s[j].grade) { temp=s[i]; s[i]=s[j]; s[j]=temp; } if(s[i].grade==s[j].grade) { if(s[i].status<s[j].status) { temp=s[i]; s[i]=s[j]; s[j]=temp; } } } else //升序排序 { if(s[i].grade>s[j].grade) { temp=s[i]; s[i]=s[j]; s[j]=temp; } if(s[i].grade==s[j].grade) { if(s[i].status>s[j].status) { temp=s[i]; s[i]=s[j]; s[j]=temp; } } } } } } int main() { int s_count; // cout<<"请输入学生个数:"<<endl; cin>>s_count; student *s=new student[s_count]; // cout<<"请输入排序方式 0:降序排序 1:升序排序"<<endl; int j;//排序方式 0 or 1 int i; cin>>j; // cout<<"请输入"<<s_count<<"个学生姓名 成绩"<<endl; for( i=0;i<s_count;i++) { string name; int gra; cin>>name>>gra; s[i].name=name; s[i].grade=gra; s[i].status=-i; } bool flag; if(j==0) flag=false; else if(j==1) flag=true; sortbygrade(s,s_count,flag); for( i=0;i<s_count;i++) { cout<<s[i].name<<" "<<s[i].grade<<endl; } }