题目描述
某公司由N名员工,给定所有员工工资的清单,财务人员要按照特定的顺序排列员工的工资,他按照工资的频次降序排列,即给定清单中所有频次较高的工资将在频次较低的工资之前出现。如果相同数量的员工都有相同的工资,则将按照给定清单中该工资第一次出现的顺序排列。
写一个算法来帮助财务人员排列员工工资顺序。
输入
该函数/方法的输入包括两个参数——
num,一个整数,表示员工人数。
salaries,一个正整数列表,表示N名员工的工资。
输出
返回一个正整数列表,按照员工工资的频次排序。
约束条件
1<=num<=10^5
1<=salaries[i]<=10^9
0<=i<=num
代码
#include <iostream>
#include <vector>
#include<algorithm>
using namespace std;
int main() {
int workerNum = 19;
//cin >> workerNum;
vector<int> salaries = { 1,2,4,3,3,3,4,2,5,5,5,5,6,6,6,7,8,9,10 };
//for (int i = 0; i < workerNum; i++) {
// int ss;
// cin >> ss;
// salaries.push_back(ss);
//}
vector<vector<int> > SalariesCount(workerNum, vector<int>(2));
int count = 0;
for (int i = 0; i < workerNum; i++) {
bool flag = false;
if (i == 0) {
SalariesCount[count][0] = salaries[i];
SalariesCount[count][1] = 1;
}
else {
for (int j = 0; j < SalariesCount.size(); j++) {
if (salaries[i] == SalariesCount[j][0])
{
SalariesCount[j][1] = SalariesCount[j][1] + 1;
flag = true;
break;
}
}
if (!flag) {
count = count + 1;
SalariesCount[count][0] = salaries[i];
SalariesCount[count][1] = 1;
}
}
}
//使用冒泡排序进行排序
for (int k = 0; k < SalariesCount.size() - 1; k++) {
for (int m = 0; m < SalariesCount.size() - k - 1; m++) {
if (SalariesCount[m][1] < SalariesCount[m + 1][1]) {
vector<int> temp;
temp = SalariesCount[m + 1];
SalariesCount[m + 1] = SalariesCount[m];
SalariesCount[m] = temp;
}
}
}
for (int l = 0; l < SalariesCount.size(); l++) {
if (SalariesCount[l][1] > 0) {
for (int n = 1; n <= SalariesCount[l][1]; n++) {
cout << SalariesCount[l][0] << endl;
}
}
}
return 0;
}