题解 | #成绩排序#
成绩排序
https://www.nowcoder.com/practice/8e400fd9905747e4acc2aeed7240978b
#include <iostream>
#include <vector>
using namespace std;
int main() {
int n = 0;
bool flg;
while (cin >> n >> flg) { // 注意 while 处理多个 case
vector<int> grades(n, 0);
vector<string> names(n);
for (int i = 0; i < n; i++) {
cin >> names[i] >> grades[i];
}
if (flg == false)
for (int i = 0; i < n; i++) {
for (int j = 0; j < n-1; j++) {
if (grades[j] < grades[j+1]) {
int tmp = grades[j];
grades[j] = grades[j+1];
grades[j+1] = tmp;
string tmpstr = names[j];
names[j] = names[j+1];
names[j+1] = tmpstr;
}
}
}
if (flg == true)
for (int i = 0; i < n; i++) {
for (int j = 0; j < n-1; j++) {
if (grades[j] > grades[j+1]) {
int tmp = grades[j];
grades[j] = grades[j+1];
grades[j+1] = tmp;
string tmpstr = names[j];
names[j] = names[j+1];
names[j+1] = tmpstr;
}
}
}
for (int i = 0; i < n; i++) {
cout << names[i] << ' ' << grades[i] << endl;
}
}
}
冒泡排序法可以处理同分数的学生按照录入顺序排序的问题,空间复杂度O(n),时间复杂度O(n^2)

查看20道真题和解析