题目描述
查找和排序
题目:输入任意(用户,成绩)序列,可以获得成绩从高到低或从低到高的排列,相同成绩
都按先录入排列在前的规则处理。
示例:
jack 70
peter 96
Tom 70
smith 67
从高到低 成绩
peter 96
jack 70
Tom 70
smith 67
从低到高
smith 67
jack 70
Tom 70
peter 96
输入描述
输入多行,先输入要排序的人的个数,然后输入排序方法0(降序)或者1(升序)再分别输入他们的名字和成绩,以一个空格隔开
输出描述
按照指定方式输出名字和成绩,名字和成绩之间以一个空格隔开
示例1
输入
3
0
fang 90
yang 50
ning 70
输出
fang 90
ning 70
yang 50
解法
#include<iostream>
using namespace std;
void Order();
void swap();
int main(){
Order();
return 0;
}
void Order(){
int num = 0; //人数
int rule = 0; //排序规则
while(cin >> num >>rule){ //为了多组输入
int score[num];
string name[num];
for(int i = 0; i < num; i++){
cin >> name[i];
cin >> score[i];
}
if (rule == 0){
for(int i = 0; i < num -1; i++) //冒泡排序
for(int j = 0; j < num - i - 1; j++){
if(score[j] < score[j + 1]){
swap(score[j], score[j + 1]);
swap(name[j], name[j + 1]);
}
}
}
if (rule == 1){
for(int i = 0; i < num -1; i++)
for(int j = 0; j < num - i - 1; j++){
if(score[j] > score[j + 1]){
swap(score[j], score[j + 1]);
swap(name[j], name[j + 1]);
}
}
}
for(int i = 0; i < num; i++){
cout << name[i];
cout << ' ';
cout << score[i] << endl;
}
}
}
void swap(int& a, int& b){
int temp = 0;
temp = a;
a = b;
b = temp;
}
void swap(string& a, string& b){
string temp = " ";
temp = a;
a = b;
b = temp;
}