工资排序问题

题目描述

某公司由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;
}

输出结果

posted @ 2019-08-25 22:11  林深处见鹿  阅读(523)  评论(0)    收藏  举报