【问题描述】输入若干个武将的信息,包括姓名、体力、智力和武力值,直到用户输入为‘#’,表示输入结束。再输入指标编号(1表示体力 2表示智力 3表示武力),根据该指标对所有将领进行从大到小排序,指标值相同的武将保持输入时的先后顺序不变,并将排序后的结果输出,每个信息之间用空格分隔。请自己实现排序算法。
【输入说明】
‘#’之前的每一行都包含四个信息,分别是姓名、体力、智力、武力;‘#’后一行的数字表示单项指标序号,如1表示按体力排序。
【输出说明】
将排序后的武将信息,按行输出,每行包含姓名、体力、武力、智力等四个数据,每个数据之间用单个空格分隔。
【样例输入】
guan 90 80 90
zhao 90 90 90
zhang 100 70 80
#
2
【样例输出】
zhao 90 90 90
guan 90 80 90
zhang 100 70 80
【样例说明】
按指标2——智力进行从大到小排序,武将"zhao"排在第一位,武将“zhang”排在第三位。
【特别说明】
要自己实现排序算法,不用调用sort函数。
ps:就不听他的,就写sort函数
#include<iostream>
#include<algorithm>
using namespace std;
struct military{
string name;
int ti,zhi,wu;
}m1[100];
bool cmp1(military a,military b){
return a.ti>b.ti;
}
bool cmp2(military a,military b){
return a.zhi>b.zhi;
}
bool cmp3(military a,military b){
return a.wu>b.wu;
}
int main(){
int i=0;
while(true){
cin >> m1[i].name;
if(m1[i].name=="#") break;
cin >> m1[i].ti >> m1[i].zhi >> m1[i].wu;
i++;
}
int fl;cin >> fl;
if(fl==1) sort(m1,m1+i,cmp1);
if(fl==2) sort(m1,m1+i,cmp2);
if(fl==3) sort(m1,m1+i,cmp3);
for(int j=0;j<i;j++){
cout << m1[j].name << " " << m1[j].ti << " " << m1[j].zhi << " " << m1[j].wu << endl;
}
return 0;
}
我想,有没有更短的代码给我学习一下哇。。。