当前位置: 代码迷 >> 综合 >> 2021秋季《数据结构》_EOJ 1060.数组排序
  详细解决方案

2021秋季《数据结构》_EOJ 1060.数组排序

热度:56   发布时间:2023-12-10 19:45:01.0

题目

给定一个长度为 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;
}
  相关解决方案