Related Articles
Sort an array according to the increasing frequency of the digit K in the array elements
• Difficulty Level : Hard
• Last Updated : 12 Mar, 2021

Given an array arr[] of size N, and an integer K representing a digit, the task is to print the given array in increasing order according to the increasing frequency of the digit K in the array elements.

Examples:

Input: arr[] = {15, 66, 26, 91}, K = 6
Output: 15 91 26 66
Explanation:
The frequency of digit 6 in array elements is {0, 2, 1, 0}. The elements in increasing order of frequency of the digit 6 in {15, 91, 26, 66}.

Input: arr[] = {20, 21, 0}, K = 0
Output: 21 20 0
Explanation:
The frequency of digit 0 in array elements is {1, 0, 1}. The elements in increasing order of frequency of the digit 0 is {21, 20, 0}.

Approach: The idea is to count the occurrences of the digit K for each element of the array and sort the array according to it. Follow the steps below to solve the problem:

Below is the implementation of the above approach:

## C++

 `// C++ program for the above approach``#include ``using` `namespace` `std;` `// Function to count the occurrences``// of digit K in an element``int` `countOccurrences(``int` `num, ``int` `K)``{``    ``// If num and K are both 0``    ``if` `(K == 0 && num == 0)``        ``return` `1;` `    ``// Initialize count as 0``    ``int` `count = 0;` `    ``// Count for occurrences of digit K``    ``while` `(num > 0) {``        ``if` `(num % 10 == K)``            ``count++;``        ``num /= 10;``    ``}` `    ``// Return the count``    ``return` `count;``}` `// Function to print the given array``// in increasing order of the digit``// K in the array elements``void` `sortOccurrences(``int` `arr[],``                     ``int` `N, ``int` `K)``{``    ``// Stores the occurrences of K``    ``// in each element``    ``multimap<``int``, ``int``> mp;` `    ``// Traverse the array``    ``for` `(``int` `i = 0; i < N; i++) {` `        ``// Count the frequency``        ``// of K in arr[i]``        ``int` `count = countOccurrences(``            ``arr[i], K);` `        ``// Insert elements in mp``        ``mp.insert(pair<``int``, ``int``>(``            ``count, arr[i]));``    ``}` `    ``// Print the elements in the map, mp``    ``for` `(``auto``& itr : mp) {``        ``cout << itr.second << ``" "``;``    ``}``}` `// Driver Code``int` `main()``{``    ``int` `arr[] = { 15, 66, 26, 91 };``    ``int` `K = 6;``    ``int` `N = ``sizeof``(arr) / ``sizeof``(arr);` `    ``// Function Call``    ``sortOccurrences(arr, N, K);` `    ``return` `0;``}`

## Java

 `// Java program for the above approach``import` `java.io.*;``import` `java.lang.*;``import` `java.util.*;` `class` `GFG {` `  ``// Function to count the occurrences``  ``// of digit K in an element``  ``static` `int` `countOccurrences(``int` `num, ``int` `K)``  ``{``    ``// If num and K are both 0``    ``if` `(K == ``0` `&& num == ``0``)``      ``return` `1``;` `    ``// Initialize count as 0``    ``int` `count = ``0``;` `    ``// Count for occurrences of digit K``    ``while` `(num > ``0``) {``      ``if` `(num % ``10` `== K)``        ``count++;``      ``num /= ``10``;``    ``}` `    ``// Return the count``    ``return` `count;``  ``}` `  ``// Pair class``  ``static` `class` `Pair {` `    ``int` `idx;``    ``int` `freq;` `    ``Pair(``int` `idx, ``int` `freq)``    ``{``      ``this``.idx = idx;``      ``this``.freq = freq;``    ``}``  ``}` `  ``// Function to print the given array``  ``// in increasing order of the digit``  ``// K in the array elements``  ``static` `void` `sortOccurrences(``int` `arr[], ``int` `N, ``int` `K)``  ``{` `    ``// Stores the Pair with index``    ``// and occurences of K of each element``    ``Pair mp[] = ``new` `Pair[N];` `    ``// Traverse the array``    ``for` `(``int` `i = ``0``; i < N; i++) {` `      ``// Count the frequency``      ``// of K in arr[i]``      ``int` `count = countOccurrences(arr[i], K);` `      ``// Insert Pair in mp``      ``mp[i] = ``new` `Pair(i, count);``    ``}` `    ``// sort the mp in increasing order of freq``    ``// if freq equal then according to index``    ``Arrays.sort(mp, (p1, p2) -> {``      ``if` `(p1.freq == p2.freq)``        ``return` `p1.idx - p2.idx;``      ``return` `p1.freq - p2.freq;``    ``});` `    ``// Print the elements in the map, mp``    ``for` `(Pair p : mp) {``      ``System.out.print(arr[p.idx] + ``" "``);``    ``}``  ``}` `  ``// Driver Code``  ``public` `static` `void` `main(String[] args)``  ``{` `    ``int` `arr[] = { ``15``, ``66``, ``26``, ``91` `};``    ``int` `K = ``6``;``    ``int` `N = arr.length;` `    ``// Function Call``    ``sortOccurrences(arr, N, K);``  ``}``}` `// This code is contributed by Kingash.`

## Python3

 `# Python program for the above approach` `# Function to count the occurrences``# of digit K in an element``def` `countOccurrences( num, K):``  ` `    ``# If num and K are both 0``    ``if` `(K ``=``=` `0` `and` `num ``=``=` `0``):``        ``return` `1``      ` `    ``# Initialize count as 0``    ``count ``=` `0``    ` `    ``# Count for occurrences of digit K``    ``while` `(num > ``0``):``        ``if` `(num ``%` `10` `=``=` `K):``            ``count ``+``=` `1``        ``num ``/``/``=` `10``        ` `    ``# Return the count``    ``return` `count` `# Function to print the given array``# in increasing order of the digit``# K in the array elements``def` `sortOccurrences(arr, N, K):``  ` `    ``# Stores the occurrences of K``    ``# in each element``    ``mp ``=` `[]``    ` `    ``# Traverse the array``    ``for` `i ``in` `range``(N):``      ` `        ``# Count the frequency``        ``# of K in arr[i]``        ``count ``=` `countOccurrences(arr[i], K)``        ` `        ``# Insert elements in mp``        ``mp.append([count, arr[i]])` `    ``# Print the elements in the map, mp``    ``mp ``=` `sorted``(mp)``    ` `    ``for` `itr ``in` `mp:``        ``print``(itr[``1``], end ``=` `' '``)` `# Driver Code``arr ``=` `[ ``15``, ``66``, ``26``, ``91` `]``K ``=` `6``N ``=` `len``(arr)` `# Function Call``sortOccurrences(arr, N, K);` `# This code is contributed by rohitsingh07052.`
Output:
`15 91 26 66`

Time Complexity: O(N*log10N)
Auxiliary Space: O(N)

Attention reader! Don’t stop learning now. Get hold of all the important mathematical concepts for competitive programming with the Essential Maths for CP Course at a student-friendly price. To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

My Personal Notes arrow_drop_up