# Print numbers in descending order along with their frequencies

• Last Updated : 06 May, 2021

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

Want to learn from the best curated videos and practice problems, check out the C++ Foundation Course for Basic to Advanced C++ and C++ STL Course for the language and STL. To complete your preparation from learning a language to DS Algo and many more, please refer Complete Interview Preparation Course.

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:

## CPP

 `// 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;``}`

## Java

 `// Java program to print the elements in``// descending along with their frequencies``import` `java.util.*;` `class` `GFG``{` `// Function to print the elements in descending``// along with their frequencies``static` `void` `printElements(``int` `a[], ``int` `n)``{` `    ``// Sorts the element in decreasing order``    ``Arrays.sort(a);``    ``a = reverse(a);``    ``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``])``        ``{``            ``System.out.print(a[i]+ ``" occurs "` `+``                            ``cnt + ``" times\n"``);``            ``cnt = ``1``;``        ``}``        ``else``            ``cnt += ``1``;``    ``}` `    ``// Prints the last step``    ``System.out.print(a[n - ``1``]+ ``" occurs "` `+``                    ``cnt + ``" times\n"``);``}` `static` `int``[] reverse(``int` `a[])``{``    ``int` `i, n = a.length, t;``    ``for` `(i = ``0``; i < n / ``2``; i++)``    ``{``        ``t = a[i];``        ``a[i] = a[n - i - ``1``];``        ``a[n - i - ``1``] = t;``    ``}``    ``return` `a;``}` `// Driver Code``public` `static` `void` `main(String[] args)``{``    ``int` `a[] = { ``1``, ``1``, ``1``, ``2``, ``3``, ``4``, ``9``, ``9``, ``10` `};``    ``int` `n = a.length;` `    ``printElements(a, n);``}``}` `// This code is contributed by PrinciRaj1992`

## 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`

## C#

 `// C# program to print the elements in``// descending along with their frequencies``using` `System;` `class` `GFG``{` `// Function to print the elements in descending``// along with their frequencies``static` `void` `printElements(``int` `[]a, ``int` `n)``{` `    ``// Sorts the element in decreasing order``    ``Array.Sort(a);``    ``a = reverse(a);``    ``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])``        ``{``            ``Console.Write(a[i]+ ``" occurs "` `+``                            ``cnt + ``" times\n"``);``            ``cnt = 1;``        ``}``        ``else``            ``cnt += 1;``    ``}` `    ``// Prints the last step``    ``Console.Write(a[n - 1]+ ``" occurs "` `+``                    ``cnt + ``" times\n"``);``}` `static` `int``[] reverse(``int` `[]a)``{``    ``int` `i, n = a.Length, t;``    ``for` `(i = 0; i < n / 2; i++)``    ``{``        ``t = a[i];``        ``a[i] = a[n - i - 1];``        ``a[n - i - 1] = t;``    ``}``    ``return` `a;``}` `// Driver Code``public` `static` `void` `Main(String[] args)``{``    ``int` `[]a = { 1, 1, 1, 2, 3, 4, 9, 9, 10 };``    ``int` `n = a.Length;` `    ``printElements(a, n);``}``}` `// This code is contributed by PrinciRaj1992`

## PHP

 ``

## Javascript

 ``
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