Skip to content
Related Articles
Get the best out of our app
GeeksforGeeks App
Open App
geeksforgeeks
Browser
Continue

Related Articles

Modify an array by sorting after reversal of bits of each array element

Improve Article
Save Article
Like Article
Improve Article
Save Article
Like Article

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

Java




// Java implementation of
// the above approach
import java.io.*;
import java.util.*;
 
class GFG{
     
// Function to convert binary
// number to equivalent decimal
static 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.charAt(i) == '1')
            dec_value += base;
             
        base = base * 2;
    }
    return dec_value;
}
  
// Function to convert a decimal
// to equivalent binary representation
static String decimalToBinary(int n)
{
     
    // Stores the binary representation
    String binstr = "";
  
    while (n > 0)
    {
         
        // Since ASCII value of
        // '0', '1' are 48 and 49
        binstr += (char)(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
static 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
static void printSortedArray(int arr[], int size)
{
     
    // Sort the array
    Arrays.sort(arr);
  
    // Traverse the array
    for(int i = 0; i < size; i++)
     
        // Print the array elements
        System.out.print(arr[i] + " ");
  
    System.out.println();
}
  
// Utility function to reverse the
// binary representations of all
// array elements and sort the modified array
static 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
 
public static void main(String[] args)
{
    int arr[] = { 98, 43, 66, 83 };
    int n = arr.length;
     
    modifyArray(arr, n);
}
}
 
// This code is contributed by rag2127

Python3




# Python3 implementation of
# the above approach
 
# Function to convert binary
# number to equivalent decimal
def binaryToDecimal(n):
 
    num = n
    dec_value = 0
 
    # Set base value to 1, i.e 2^0
    base = 1
 
    length = len(num)
     
    for i in range(length - 1, -1, -1):
        if (num[i] == '1'):
            dec_value += base
             
        base = base * 2
 
    return dec_value
 
# Function to convert a decimal
# to equivalent binary representation
def decimalToBinary(n):
 
    # Stores the binary representation
    binstr = ""
 
    while (n > 0):
 
        # Since ASCII value of
        # '0', '1' are 48 and 49
        binstr += chr(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
def reversedBinaryDecimal(N):
 
    # Stores reversed binary
    # representation of given decimal
    decimal_to_binar = decimalToBinary(N)
 
    # Stores equivalent decimal
    # value of the binary representation
    binary_to_decimal = binaryToDecimal(
        decimal_to_binar)
 
    # Return the resultant integer
    return binary_to_decimal
 
# Utility function to print the sorted array
def printSortedArray(arr, size):
 
    # Sort the array
    arr.sort()
 
    # Traverse the array
    for i in range(size):
 
        # Print the array elements
        print(arr[i], end=" ")
 
    print()
 
# Utility function to reverse the
# binary representations of all
# array elements and sort the modified array
def modifyArray(arr, size):
 
    # Traverse the array
    for i in range(size):
 
        # Passing array elements to
        # reversedBinaryDecimal function
        arr[i] = reversedBinaryDecimal(arr[i])
 
    # Pass the array to
    # the sorted array
    printSortedArray(arr, size)
 
# Driver Code
if __name__ == "__main__":
 
    arr = [ 98, 43, 66, 83 ]
    n = len(arr)
 
    modifyArray(arr, n)
 
# This code is contributed by ukasp

Javascript




<script>
 
// Javascript implementation of
// the above approach
 
// Function to convert binary
// number to equivalent decimal
function binaryToDecimal(n)
{
    let num = n;
    let dec_value = 0;
  
    // Set base value to 1, i.e 2^0
    let base = 1;
  
    let len = num.length;
    for(let 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
function decimalToBinary(n)
{
     
    // Stores the binary representation
    let binstr = "";
  
    while (n > 0)
    {
         
        // Since ASCII value of
        // '0', '1' are 48 and 49
        binstr += String.fromCharCode(n % 2 + 48);
        n = Math.floor(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
function reversedBinaryDecimal(N)
{
     
    // Stores reversed binary
    // representation of given decimal
    let decimal_to_binar = decimalToBinary(N);
     
    // Stores equivalent decimal
    // value of the binary representation
    let binary_to_decimal = binaryToDecimal(
        decimal_to_binar);
  
    // Return the resultant integer
    return binary_to_decimal;
}
 
// Utility function to print the sorted array
function printSortedArray(arr, size)
{
     
    // Sort the array
    arr.sort(function(a, b){return a - b;});
  
    // Traverse the array
    for(let i = 0; i < size; i++)
  
        // Print the array elements
        document.write(arr[i] + " ");
  
    document.write("<br>")
}
 
// Utility function to reverse the
// binary representations of all
// array elements and sort the modified array
function modifyArray(arr, size)
{
     
    // Traverse the array
    for(let 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
let arr = [ 98, 43, 66, 83 ];
let n = arr.length;
 
modifyArray(arr, n);
 
// This code is contributed by avanitrachhadiya2155
 
</script>

C#




using System;
using System.Linq;
 
class GFG
{
    // Function to convert binary
    // number to equivalent decimal
    static int BinaryToDecimal(string n)
    {
        string num = n;
        int dec_value = 0;
 
        // Set base1 value to 1, i.e 2^0
        int base1 = 1;
 
        int len = num.Length;
        for (int i = len - 1; i >= 0; i--)
        {
            if (num[i] == '1')
                dec_value += base1;
 
            base1 = base1 * 2;
        }
        return dec_value;
    }
 
    // Function to convert a decimal
    // to equivalent binary representation
    static string DecimalToBinary(int n)
    {
 
        // Stores the binary representation
        string binstr = "";
 
        while (n > 0)
        {
 
            // Since ASCII value of
            // '0', '1' are 48 and 49
            binstr += (char)(n % 2 + 48);
            n = n / 2;
        }
 
        // As the string is already reversed,
        // no further reversal is required
        return new string(binstr.ToArray());
    }
 
    // Function to convert the reversed binary
    // representation to equivalent integer
    static 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
    static void PrintSortedArray(int[] arr, int size)
    {
 
        // Sort the array
        Array.Sort(arr);
 
        // Traverse the array
        for (int i = 0; i < size; i++)
 
            // Print the array elements
            Console.Write(arr[i] + " ");
 
        Console.WriteLine();
    }
 
    // Utility function to reverse the
    // binary representations of all
    // array elements and sort the modified array
    static 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
    public static void Main(string[] args)
    {
        int[] arr = { 98, 43, 66, 83 };
        int n = arr.Length;
 
        ModifyArray(arr, n);
    }
}

Output: 

33 35 53 101

 

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

 


My Personal Notes arrow_drop_up
Last Updated : 19 Jan, 2023
Like Article
Save Article
Similar Reads
Related Tutorials