Skip to content
Related Articles

Related Articles

Modify an array by sorting after reversal of bits of each array element
  • Difficulty Level : Medium
  • Last Updated : 01 Apr, 2021

Given an array arr[] consisting of N integers, the task is to modify the array by replacing each array element with the number obtained by reversing their respective binary representations and sort the modified array.

Examples:

Input: arr[ ] = {43, 422, 132}
Output: 33 53 203
Explanation
The binary representation of the array elements are {101011, 110100110, 10000100}.
Reversed binary representations are {110101, 011001011,  0010000}.
Equivalent numeric values of the reversed binary representations are {53, 203, 33}.
Sorted order of these elements are {33, 53, 203}.

Input: arr[ ] ={ 98, 43, 66, 83}
Output: 33 35 53 101

Approach: Follow the steps below to solve the problem:



Below is the implementation of the above approach:

C++14




// C++ implementation of
// the above approach
  
#include <bits/stdc++.h>
using namespace std;
  
// Function to convert binary
// number to equivalent decimal
int binaryToDecimal(string n)
{
    string num = n;
    int dec_value = 0;
  
    // Set base value to 1, i.e 2^0
    int base = 1;
  
    int len = num.length();
    for (int i = len - 1; i >= 0; i--) {
        if (num[i] == '1')
            dec_value += base;
        base = base * 2;
    }
  
    return dec_value;
}
  
// Function to convert a decimal
// to equivalent binary representation
string decimalToBinary(int n)
{
    // Stores the binary representation
    string binstr = "";
  
    while (n > 0) {
  
        // Since ASCII value of
        // '0', '1' are 48 and 49
        binstr += (n % 2 + 48);
        n = n / 2;
    }
  
    // As the string is already reversed,
    // no further reversal is required
    return binstr;
}
  
// Function to convert the reversed binary
// representation to equivalent integer
int reversedBinaryDecimal(int N)
{
    // Stores reversed binary
    // representation of given decimal
    string decimal_to_binar
        = decimalToBinary(N);
  
    // Stores equivalent decimal
    // value of the binary representation
    int binary_to_decimal
        = binaryToDecimal(decimal_to_binar);
  
    // Return the resultant integer
    return binary_to_decimal;
}
  
// Utility function to print the sorted array
void printSortedArray(int arr[], int size)
{
    // Sort the array
    sort(arr, arr + size);
  
    // Traverse the array
    for (int i = 0; i < size; i++)
  
        // Print the array elements
        cout << arr[i] << " ";
  
    cout << endl;
}
  
// Utility function to reverse the
// binary representations of all
// array elements and sort the modified array
void modifyArray(int arr[], int size)
{
    // Traverse the array
    for (int i = 0; i < size; i++) {
  
        // Passing array elements to
        // reversedBinaryDecimal function
        arr[i] = reversedBinaryDecimal(
            arr[i]);
    }
  
    // Pass the array to
    // the sorted array
    printSortedArray(arr, size);
}
  
// Driver Code
int main()
{
    int arr[] = { 98, 43, 66, 83 };
    int n = sizeof(arr) / sizeof(arr[0]);
  
    modifyArray(arr, n);
  
    return 0;
}
Output:
33 35 53 101

Time Complexity: O(NlogN)
Auxiliary Space: O(log2M), where M denotes the maximum element present in the array.

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.

My Personal Notes arrow_drop_up
Recommended Articles
Page :