Problem:Given an array of integers, sort the array according to frequency of elements. For example, if the input array is {2, 3, 2, 4, 5, 12, 2, 3, 3, 3, 12}, then modify the array to {3, 3, 3, 3, 2, 2, 2, 12, 12, 4, 5}.
If frequencies of two elements are same, print them in increasing order.
The problem was givenĀ at Oracle Interview.
#include <stdio.h>
#include <vector>
#include <algorithm>
using namespace std;
struct st{
int fr;
int num;
};
bool cmp(st a,st b)
{
if(a.fr>b.fr)
return 1;
else if(a.fr==b.fr)
{
if(a.num>b.num)
return 0;
return 1;
}
else
return 0;
}
int main() {
//code
int t,n,a;
st s;
//st vb[65];
vector<st> vb;
scanf("%d",&t);
int arr[62];
while(t--)
{
vb.clear();
scanf("%d",&n);
for(int i=0;i<62;i++)
arr[i]=0;
for(int i=0;i<n;i++)
{
scanf("%d",&a);
arr[a]+=1;
}
for(int i=0;i<62;i++)
{
if(arr[i]!=0)
{
s.fr=arr[i];
s.num=i;
//vb[idx]=s;
vb.push_back(s);
}
}
//sort(vb,vb+idx,cmp);
sort(vb.begin(),vb.end(),cmp);
for(int i=0;i<vb.size();i++)
{
int fre=vb[i].fr;
int nm=vb[i].num;
for(int j=1;j<=fre;j++)
printf("%d ",nm);
}
printf("\n");
}
return 0;
}