中兴笔试排序题求解答
给定一组数,按照数组中出现的次数依次从大到小排序,出现次数一样的按照数组中的先后顺序输出 比如:输入:1 1 1 1 3 3 3 4 5 2 6 6 6 6 6输出:6 6 6 6 6 1 1 1 1 3 3 3 4 5 2
求代码共享!
我的输出:
6 6 6 6 6 1 1 1 1 3 3 3 5 4
2
我知道是map底层排序不稳定排序的原因,但是不知道怎么解决,求解决!
代码如下:
#include <iostream> #include <map> #include <vector> #include <algorithm> using namespace std; bool compare(pair<int, int> lhs, pair<int, int>rhs) { return lhs.second>rhs.second; } int main() { while (1) { vector<int> vec; map<int, int> m; int num; cout << "输入数组元素的个数:"; cin >> num; //输入数组并计数 int i; for (i = 0; i<num; i++) { int temp; cin >> temp; vec.push_back(temp); if (m.find(temp) == m.end()) m.insert(make_pair(temp, 1)); else m[temp]++; } vector<pair<int,int> > res; for (i=0;i<num;i++) { if(find(res.begin(),res.end(),make_pair(vec[i],m[vec[i]]))==res.end()) res.push_back(make_pair(vec[i],m[vec[i]])); } stable_sort(res.begin(),res.end(),compare); for(vector<pair<int,int> >::iterator it=res.begin();it!=res.end();it++) for(i=0;i<it->second;i++) cout<<it->first<<" "; cout<<endl; } return 0; }