Open In App

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

Last Updated : 19 Jan, 2023
Improve
Improve
Like Article
Like
Save
Share
Report

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.

 



Like Article
Suggest improvement
Share your thoughts in the comments

Similar Reads