Rearrange an array such that ‘arr[j]’ becomes ‘i’ if ‘arr[i]’ is ‘j’ in C++


We are given a positive integer type array, let's say, arr[] of any given size such that elements in an array should value greater than 0 but less than the size of an array. The task is to rearrange an array in such a manner that if arr[j] is ‘j’ then arr[j] becomes ‘i’ and print the final result.

Let us see various input output scenarios for this −

Input − int arr[] = {3, 4, 1, 2, 0}

Outpu t− Array before Arrangement: 3 4 1 2 0 Rearrangement of an array such that arr[j] becomes i if arr[i] is j is: 4 2 3 0 1

Explanation − we are given an integer array of size 6 and all the elements in an array value less than 6. Now, we will rearrange the array i.e. arr[1] is 4, arr[4] = 1 ; arr[2] is 1, arr[1] = 2; arr[3] is 2, arr[2] = 3; arr[4] is 0, arr[0] =4. Therefore, the final array is 4 2 3 0 1.

Inpu t− int arr[] = {2, 0, 1, 3}

Output − Array before Arrangement: 2 0 1 3 Rearrangement of an array such that arr[j] becomes i if arr[i] is j is: 1 2 0 3

Explanation − we are given an integer array of size 6 and all the elements in an array value less than 6. Now, we will rearrange the array i.e. arr[0] is 2, arr[2] = 0 ; arr[1] is 0, arr[0] = 1; arr[2] is 1, arr[1] = 2; arr[3] is 3, arr[3] = 3. Therefore, the final array is 1 2 0 3.

Approach used in the below program is as follows

  • Input an array of integer type elements and calculate the size of an array.

  • Print the array before arrangement and call the function Rearrangement(arr, size)

  • Inside the function Rearrangement(arr, size)

    • Create an array of integer type values as ptr[] of the same size as of array arr[].

    • Start loop FOR, from i to 0 till i less than size. Inside the loop, set ptr[arr[i]] to i.

    • Start loop FOR from i to 0 till i less than size. Inside the loop, set arr[i] to ptr[i].

  • Print the array after the rearrangement of values of an array.

Example

#include <bits/stdc++.h>
using namespace std;
void Rearrangement(int arr[], int size){
   int ptr[size];
   for(int i = 0; i < size; i++){
      ptr[arr[i]] = i;
   }
   for(int i = 0; i < size; i++){
      arr[i] = ptr[i];
   }
}
int main(){
   //input an array
   int arr[] = {3, 4, 1, 2, 0};
   int size = sizeof(arr) / sizeof(arr[0]);
   //print the original Array
   cout<<"Array before Arrangement: ";
   for (int i = 0; i < size; i++){
      cout << arr[i] << " ";
   }
   //calling the function to rearrange the array
   Rearrangement(arr, size);
   //print the array after rearranging the values
   cout<<"\nRearrangement of an array such that ‘arr[j]’ becomes ‘i’ if ‘arr[i]’ is ‘j’ is: ";
   for(int i = 0; i < size; i++){
      cout<< arr[i] << " ";
   }
   return 0;
}

Output

If we run the above code it will generate the following Output

Array before Arrangement: 3 4 1 2 0
Rearrangement of an array such that ‘arr[j]’ becomes ‘i’ if ‘arr[i]’ is ‘j’ is: 4 2 3 0 1

Updated on: 02-Nov-2021

198 Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements