# Print numbers in descending order along with their frequencies

Given an array arr, the task is to print the elements of the array in descending order along with their frequencies.

Examples:

Input: arr[] = {1, 3, 3, 3, 4, 4, 5}
Output: 5 occurs 1 times
4 occurs 2 times
3 occurs 3 times
1 occurs 1 times

Input: arr[] = {1, 1, 1, 2, 3, 4, 9, 9, 10}
Output: 10 occurs 1 times
9 occurs 2 times
4 occurs 1 times
3 occurs 1 times
2 occurs 1 times
1 occurs 3 times

## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

Naive approach: Use some Data-Structure (e.g. multiset) which stores elements in decreasing order and then print the elements one by one with it’s count and then erase it from the Data-structure. The time complexity will be O(N log N) and the auxiliary space will be O(N) for the Data-structure used.

Below is the implementation of the above approach:

 `// C++ program to print the elements in ` `// descending along with their frequencies ` `#include ` `using` `namespace` `std; ` ` `  `// Function to print the elements in descending ` `// along with their frequencies ` `void` `printElements(``int` `a[], ``int` `n) ` `{ ` ` `  `    ``// A multiset to store elements in decreasing order ` `    ``multiset<``int``, greater<``int``> > ms; ` ` `  `    ``// Insert elements in the multiset ` `    ``for` `(``int` `i = 0; i < n; i++) { ` `        ``ms.insert(a[i]); ` `    ``} ` ` `  `    ``// Print the elements along with their frequencies ` `    ``while` `(!ms.empty()) { ` ` `  `        ``// Find the maximum element ` `        ``int` `maxel = *ms.begin(); ` ` `  `        ``// Number of times it occurs ` `        ``int` `times = ms.count(maxel); ` ` `  `        ``cout << maxel << ``" occurs "` `<< times << ``" times\n"``; ` ` `  `        ``// Erase the maxel ` `        ``ms.erase(maxel); ` `    ``} ` `} ` ` `  `// Driver Code ` `int` `main() ` `{ ` `    ``int` `a[] = { 1, 1, 1, 2, 3, 4, 9, 9, 10 }; ` `    ``int` `n = ``sizeof``(a) / ``sizeof``(a[0]); ` `    ``printElements(a, n); ` `    ``return` `0; ` `} `

Output:

```10 occurs 1 times
9 occurs 2 times
4 occurs 1 times
3 occurs 1 times
2 occurs 1 times
1 occurs 3 times
```

Efficient Approach: Sort the array in descending order and then start printing the elements from the beginning along with their frequencies.

Below is the implementation of the above approach:

## C++

 `// C++ program to print the elements in ` `// descending along with their frequencies ` `#include ` `using` `namespace` `std; ` ` `  `// Function to print the elements in descending ` `// along with their frequencies ` `void` `printElements(``int` `a[], ``int` `n) ` `{ ` ` `  `    ``// Sorts the element in decreasing order ` `    ``sort(a, a + n, greater<``int``>()); ` `    ``int` `cnt = 1; ` ` `  `    ``// traverse the array elements ` `    ``for` `(``int` `i = 0; i < n - 1; i++) { ` ` `  `        ``// Prints the number and count ` `        ``if` `(a[i] != a[i + 1]) { ` `            ``cout << a[i] << ``" occurs "` `<< cnt << ``" times\n"``; ` `            ``cnt = 1; ` `        ``} ` `        ``else` `            ``cnt += 1; ` `    ``} ` ` `  `    ``// Prints the last step ` `    ``cout << a[n - 1] << ``" occurs "` `<< cnt << ``" times\n"``; ` `} ` ` `  `// Driver Code ` `int` `main() ` `{ ` `    ``int` `a[] = { 1, 1, 1, 2, 3, 4, 9, 9, 10 }; ` `    ``int` `n = ``sizeof``(a) / ``sizeof``(a[0]); ` ` `  `    ``printElements(a, n); ` `    ``return` `0; ` `} `

## Python3

 `# Python3 program to print the elements in  ` `# descending along with their frequencies  ` ` `  `# Function to print the elements in  ` `# descending along with their frequencies  ` `def` `printElements(a, n) : ` ` `  `    ``# Sorts the element in decreasing order  ` `    ``a.sort(reverse ``=` `True``)  ` `    ``cnt ``=` `1` ` `  `    ``# traverse the array elements  ` `    ``for` `i ``in` `range``(n ``-` `1``) : ` ` `  `        ``# Prints the number and count  ` `        ``if` `(a[i] !``=` `a[i ``+` `1``]) :  ` `            ``print``(a[i], ``" occurs "``, cnt, ``"times"``)  ` `            ``cnt ``=` `1` `         `  `        ``else` `: ` `            ``cnt ``+``=` `1` `     `  `    ``# Prints the last step  ` `    ``print``(a[n ``-` `1``], ``"occurs"``, cnt, ``"times"``)  ` ` `  `# Driver Code  ` `if` `__name__ ``=``=` `"__main__"` `: ` ` `  `    ``a ``=` `[ ``1``, ``1``, ``1``, ``2``,  ` `          ``3``, ``4``, ``9``, ``9``, ``10` `]  ` `    ``n ``=` `len``(a) ` ` `  `    ``printElements(a, n) ` `     `  `# This code is contributed by Ryuga `

## PHP

 ` `

Output:

```10 occurs 1 times
9 occurs 2 times
4 occurs 1 times
3 occurs 1 times
2 occurs 1 times
1 occurs 3 times
```

My Personal Notes arrow_drop_up