题目
给定一个长度为 N 的整数数组,按如下规则排序并输出。首先,输出重复出现次数最多的元素;出现次数相同时,按元素值由小到大输出。例如对于数组 1 2 3 3 4 2 3 1 5 7 排序后输出 3 3 3 1 1 2 2 4 5 7。
思路
简单的桶排序。由于要求重复输出,所以用个struct。
代码
#include<bits/stdc++.h>
using namespace std;struct MyStruct
{
int val;int time=0;
};bool cmp(MyStruct a, MyStruct b)
{
if (a.time != b.time)return a.time > b.time;else{
return a.val < b.val;}
}int main()
{
int t; cin >> t;for (int q = 0; q < t; q++){
int n; cin >> n;MyStruct a[501];int num = 0;for (int i = 0; i < n; i++){
int tmp;cin >> tmp;if (a[tmp].time == 0) num++;a[tmp].time++;a[tmp].val = tmp;}sort(a,a+500,cmp);cout << "case #" << q << ':' << endl;for (int i = 0; i < num; i++){
int time = a[i].time;for (int j = 0; j < time; j++){
cout << a[i].val << ' ';}}cout << endl;}return 0;
}