题解 | #成绩排序#
成绩排序
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)