# Sorting array elements with set bits equal to K

Given an array of integers and a number . The task is to sort only those elements of the array whose total set bits are equal to K. Sorting must be done at their relative positions only without affecting any other elements.

Examples:

```Input : arr[] = {32, 1, 9, 4, 64, 2}, K = 1
Output : 1 2 9 4 32 64
All of the elements except 9 has exactly 1 bit set.
So, all elements except 9 are sorted without affecting
the position of 9 in the input array.

Input : arr[] = {2, 15, 12, 1, 3, 9}, K = 2
Output : 2 15 3 1 9 12
```

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

Approach:

• Initialise two empty vectors.
• Traverse the array, from left to right and check the set bits of each element.
• Here, C++ inbuilt function __builtin_popcount() to count setbits.
• In first vector, insert the index of all elements with set bits equal to K.
• In second vector, insert the elements with set bits equal to K.
• Sort the second vector.
• Now, we have the index of all elements with set bit equals to K in sorted order and also all of the elements with set bit as K in sorted order.
• So, insert the elements of the second vector into the array at the indices present in first vector one by one.

Below is the implementation of the above approach:

## C++

 `// C++ program for sorting array elements ` `// with set bits equal to K ` ` `  `#include ` `using` `namespace` `std; ` ` `  `// Function to sort elements with ` `// set bits equal to k ` `void` `sortWithSetbits(``int` `arr[], ``int` `n, ``int` `k) ` `{ ` `    ``// initialise two vectors ` `    ``vector<``int``> v1, v2; ` ` `  `    ``for` `(``int` `i = 0; i < n; i++) { ` `        ``if` `(__builtin_popcount(arr[i]) == k) { ` ` `  `            ``// first vector contains indices of ` `            ``// required element ` `            ``v1.push_back(i); ` ` `  `            ``// second vector contains  ` `            ``// required elements ` `            ``v2.push_back(arr[i]); ` `        ``} ` `    ``} ` ` `  `    ``// sorting the elements in second vector ` `    ``sort(v2.begin(), v2.end()); ` ` `  `    ``// replacing the elements with k set bits ` `    ``// with the sorted elements ` `    ``for` `(``int` `i = 0; i < v1.size(); i++) ` `        ``arr[v1[i]] = v2[i]; ` ` `  `    ``// printing the new sorted array elements ` `    ``for` `(``int` `i = 0; i < n; i++) ` `        ``cout << arr[i] << ``" "``; ` `} ` ` `  `// Driver code ` `int` `main() ` `{ ` `    ``int` `arr[] = { 14, 255, 1, 7, 13 }; ` `    ``int` `n = ``sizeof``(arr) / ``sizeof``(arr); ` `    ``int` `k = 3; ` ` `  `    ``sortWithSetbits(arr, n, k); ` ` `  `    ``return` `0; ` `} `

## Java

 `// Java program for sorting array elements ` `// with set bits equal to K ` `import` `java.util.*; ` ` `  `// Represents node of a doubly linked list  ` `class` `Node  ` `{ ` ` `  `    ``// Function to sort elements with ` `    ``// set bits equal to k ` `    ``static` `void` `sortWithSetbits(``int` `arr[], ``int` `n, ``int` `k) ` `    ``{ ` `        ``// initialise two vectors ` `        ``Vector v1 = ``new` `Vector<>(), v2 = ``new` `Vector<>(); ` ` `  `        ``for` `(``int` `i = ``0``; i < n; i++) { ` `            ``if` `(Integer.bitCount(arr[i]) == k)  ` `            ``{ ` ` `  `                ``// first vector contains indices of ` `                ``// required element ` `                ``v1.add(i); ` ` `  `                ``// second vector contains  ` `                ``// required elements ` `                ``v2.add(arr[i]); ` `            ``} ` `        ``} ` ` `  `        ``// sorting the elements in second vector ` `        ``Collections.sort(v2); ` ` `  `        ``// replacing the elements with k set bits ` `        ``// with the sorted elements ` `        ``for` `(``int` `i = ``0``; i < v1.size(); i++)  ` `        ``{ ` `            ``arr[v1.get(i)] = v2.get(i); ` `        ``} ` ` `  `        ``// printing the new sorted array elements ` `        ``for` `(``int` `i = ``0``; i < n; i++)  ` `        ``{ ` `            ``System.out.print(arr[i] + ``" "``); ` `        ``} ` `    ``} ` ` `  `    ``// Driver code ` `    ``public` `static` `void` `main(String[] args) ` `    ``{ ` `        ``int` `arr[] = {``14``, ``255``, ``1``, ``7``, ``13``}; ` `        ``int` `n = arr.length; ` `        ``int` `k = ``3``; ` ` `  `        ``sortWithSetbits(arr, n, k); ` `    ``} ` `} ` ` `  `// This code is contributed by Princi Singh `

## Python3

 `# Python 3 program for sorting array  ` `# elements with set bits equal to K ` ` `  `# Function to sort elements with ` `# set bits equal to k ` `def` `sortWithSetbits(arr, n, k): ` `     `  `    ``# initialise two vectors ` `    ``v1 ``=` `[] ` `    ``v2 ``=` `[] ` ` `  `    ``for` `i ``in` `range``(``0``, n, ``1``): ` `        ``if` `(``bin``(arr[i]).count(``'1'``) ``=``=` `k): ` `             `  `            ``# first vector contains indices  ` `            ``# of required element ` `            ``v1.append(i) ` ` `  `            ``# second vector contains  ` `            ``# required elements ` `            ``v2.append(arr[i]) ` ` `  `    ``# sorting the elements in second vector ` `    ``v2.sort(reverse ``=` `False``) ` ` `  `    ``# replacing the elements with k set  ` `    ``# bits with the sorted elements ` `    ``for` `i ``in` `range``(``0``, ``len``(v1), ``1``): ` `        ``arr[v1[i]] ``=` `v2[i] ` ` `  `    ``# printing the new sorted array elements ` `    ``for` `i ``in` `range``(``0``, n, ``1``): ` `        ``print``(arr[i], end ``=` `" "``) ` ` `  `# Driver code ` `if` `__name__ ``=``=` `'__main__'``: ` `    ``arr ``=` `[``14``, ``255``, ``1``, ``7``, ``13``] ` `    ``n ``=` `len``(arr) ` `    ``k ``=` `3` ` `  `    ``sortWithSetbits(arr, n, k) ` ` `  `# This code is contributed by ` `# Surendra_Gangwar `

## C#

 `// C# program for sorting array elements ` `// with set bits equal to K ` `using` `System; ` `using` `System.Collections.Generic;  ` ` `  `// Represents node of a doubly linked list  ` `public` `class` `Node  ` `{ ` ` `  `    ``// Function to sort elements with ` `    ``// set bits equal to k ` `    ``static` `void` `sortWithSetbits(``int` `[]arr, ``int` `n, ``int` `k) ` `    ``{ ` `        ``// initialise two vectors ` `        ``List<``int``> v1 = ``new` `List<``int``>(); ` `        ``List<``int``> v2 = ``new` `List<``int``>(); ` ` `  `        ``for` `(``int` `i = 0; i < n; i++)  ` `        ``{ ` `            ``if` `(bitCount(arr[i]) == k)  ` `            ``{ ` ` `  `                ``// first vector contains indices of ` `                ``// required element ` `                ``v1.Add(i); ` ` `  `                ``// second vector contains  ` `                ``// required elements ` `                ``v2.Add(arr[i]); ` `            ``} ` `        ``} ` ` `  `        ``// sorting the elements in second vector ` `        ``v2.Sort(); ` ` `  `        ``// replacing the elements with k set bits ` `        ``// with the sorted elements ` `        ``for` `(``int` `i = 0; i < v1.Count; i++)  ` `        ``{ ` `            ``arr[v1[i]] = v2[i]; ` `        ``} ` ` `  `        ``// printing the new sorted array elements ` `        ``for` `(``int` `i = 0; i < n; i++)  ` `        ``{ ` `            ``Console.Write(arr[i] + ``" "``); ` `        ``} ` `    ``} ` `     `  `static` `int` `bitCount(``long` `x) ` `{ ` `    ``int` `setBits = 0; ` `    ``while` `(x != 0)  ` `    ``{ ` `        ``x = x & (x - 1); ` `        ``setBits++; ` `    ``} ` `    ``return` `setBits; ` `}  ` ` `  `// Driver code ` `public` `static` `void` `Main(String[] args) ` `{ ` `        ``int` `[]arr = {14, 255, 1, 7, 13}; ` `        ``int` `n = arr.Length; ` `        ``int` `k = 3; ` ` `  `        ``sortWithSetbits(arr, n, k); ` `} ` `} ` ` `  `/* This code is contributed by PrinciRaj1992 */`

Output:

```7 255 1 13 14
```

My Personal Notes arrow_drop_up Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.

Article Tags :
Practice Tags :

Be the First to upvote.

Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.