第四次CCF软件能力认证B题-数字排序 题型:模拟排序

62 阅读1分钟

3213. 数字排序 - AcWing题库

map

#include<bits/stdc++.h>
using namespace std;
int n;
map<int,int>mp;

struct cmp
{
  bool operator()(pair<int,int>a,pair<int,int>b)
  {
      if(a.second==b.second)return a.first<b.first;
      return a.second>b.second;
  }
};

int main()
{
    cin>>n;
    
    while(n--)
    {
        int x;cin>>x;
        mp[x]++;
    }
    
    //map用的随机迭代器,不能用sort()排,要放到vector里排
    vector<pair<int,int>> v(mp.begin(),mp.end());
    sort(v.begin(),v.end(),cmp());  
    
    for(auto& it:v)
    {
        cout<<it.first<<" "<<it.second<<endl;
    }
    
    return 0;
}

image.png

手写哈希表


#include<bits/stdc++.h>
using namespace std;
const int N=1e3+10;
int cnt[N];

struct cmp
{
    int a,b;
    bool operator <(const cmp& t)const
    {
        if(b==t.b)return a<t.a;
        return b>t.b;
    }
}q[N];


int main()
{
  
    int n;cin>>n;
    for(int i=1;i<=n;i++)
    {
        int x;cin>>x;
        cnt[x]++;
    }
   
    n=0;
    for(int i=0;i<N;i++)
    {
        if(cnt[i])  //如果i出现过,就保存一下i和出现次数
        {
            q[n++]={i,cnt[i]};
        }
    }
    
    sort(q,q+n);
    
    for(int i=0;i<n;i++)
    {
        cout<<q[i].a<<" "<<q[i].b<<endl;
    }
    
    return 0;
}

image.png