Sort Array Based on Frequency[Oracle]

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.

Link

#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;
}

 

Comments are closed.