Given an integer array , the task is to sort only the elements which are perfect squares at their relative positions in the array (positions of other elements must not be affected).
Examples:
Input: arr[] = {2, 64, 9, 8, 1, 4}
Output: 2 1 4 8 9 64
1, 4, 9 and 64 are the only perfect squares from the array.Input: arr[] = {1, 49, 2, 36}
Output: 1 36 2 49
Approach:
- Initialize two empty vectors and traverse the array from left to right.
- Take an integer and a float variable and for every element of the array store it’s square root in both of these variables.
- If both the variables are equal then push the index of this element in the first vector and push the element itself in the second vector.
- Sort the second vector.
- Now, we have the index of all the required elements in the first vector and also all of the required elements in sorted order in the second vector.
- So, insert the elements of the second vector into the array at the indices present in the first vector one by one.
Below is the implementation of the above approach:
C++
// C++ program to sort all the elements that are // perfect squares in their relative positions #include <bits/stdc++.h> using namespace std; // function to sort all the elements that are // perfect squares in their relative positions void sortPerfectSquare( int arr[], int n) { int a; float b; // v1 will contain index of perfect squares // v2 will contain each perfect square vector< int > v1; vector< int > v2; for ( int i = 0; i < n; i++) { b = sqrt (arr[i]); a = b; // if both a and b are equal then // arr[i] is a perfect square if (a == b) { v1.push_back(i); v2.push_back(arr[i]); } } // sort second vector sort(v2.begin(), v2.end()); // put the sorted perfect square // back into the array int j = 0; for ( int i = 0; i < n; i++) { if (v1[j] == i) { arr[i] = v2[j]; j++; } } // print final array for ( int i = 0; i < n; i++) cout << arr[i] << " " ; } // Driver code int main() { int arr[] = { 9, 44, 100, 81, 21, 64 }; int n = sizeof (arr) / sizeof (arr[0]); sortPerfectSquare(arr, n); return 0; } |
Java
// Java program to sort all the elements that are // perfect squares in their relative positions import java.util.*; class GFG { // function to sort all the elements that are // perfect squares in their relative positions static void sortPerfectSquare( int arr[], int n) { int a; float b; // v1 will contain index of perfect squares // v2 will contain each perfect square Vector<Integer> v1 = new Vector<Integer>(); Vector<Integer> v2 = new Vector<Integer>(); for ( int i = 0 ; i < n; i++) { b = ( float ) Math.sqrt(arr[i]); a = ( int ) b; // if both a and b are equal then // arr[i] is a perfect square if (a == b) { v1.add(i); v2.add(arr[i]); } } // sort second vector Collections.sort(v2); // put the sorted perfect square // back into the array int j = 0 ; for ( int i = 0 ; i < n; i++) { if (v1.get(j) == i) { arr[i] = v2.get(j); j++; } } // print final array for ( int i = 0 ; i < n; i++) System.out.print(arr[i]+ " " ); } // Driver code public static void main(String[] args) { int arr[] = { 9 , 44 , 100 , 81 , 21 , 64 }; int n = arr.length; sortPerfectSquare(arr, n); } } // This code is contributed by 29AjayKumar |
Python3
# Python 3 program to sort all # the elements that are perfect # squares in their relative positions # import sqrt() from math lib from math import sqrt # function to sort all the elements # that are perfect squares in their # relative positions def sortPerfectSquare(arr, n) : # v1 will contain index of # perfect squares and v2 will # contain each perfect square v1 = [] v2 = [] for i in range (n): b = sqrt(arr[i]) a = int (b) # if both a and b are equal then # arr[i] is a perfect square if a = = b : v1.append(i) v2.append(arr[i]) # sort second list v2.sort() j = 0 # put the sorted perfect square # back into the array for i in range (n) : if v1[j] = = i : arr[i] = v2[j] j + = 1 # print final array for i in range (n) : print (arr[i], end = " " ) # Driver code if __name__ = = "__main__" : arr = [ 9 , 44 , 100 , 81 , 21 , 64 ] n = len (arr) sortPerfectSquare(arr, n); # This code is contributed by ANKITRAI1 |
C#
// C# program to sort all the elements that are // perfect squares in their relative positions using System; using System.Collections.Generic; class GFG { // function to sort all the elements that are // perfect squares in their relative positions static void sortPerfectSquare( int []arr, int n) { int a; float b; // v1 will contain index of perfect squares // v2 will contain each perfect square List< int > v1 = new List< int >(); List< int >v2 = new List< int >(); for ( int i = 0; i < n; i++) { b = ( float ) Math.Sqrt(arr[i]); a = ( int ) b; // if both a and b are equal then // arr[i] is a perfect square if (a == b) { v1.Add(i); v2.Add(arr[i]); } } // sort second vector v2.Sort(); // put the sorted perfect square // back into the array int j = 0; for ( int i = 0; i < n; i++) { if (v1[j] == i) { arr[i] = v2[j]; j++; } } // print final array for ( int i = 0; i < n; i++) Console.Write(arr[i] + " " ); } // Driver code public static void Main(String[] args) { int []arr = { 9, 44, 100, 81, 21, 64 }; int n = arr.Length; sortPerfectSquare(arr, n); } } // This code is contributed by // PrinciRaj1992 |
PHP
<?php // PHP program to sort all the elements that are // perfect squares in their relative positions // function to sort all the elements that are // perfect squares in their relative positions function sortPerfectSquare( $arr , $n ) { // v1 will contain index of perfect squares // v2 will contain each perfect square $v1 = array (); $v2 = array (); for ( $i = 0; $i < $n ; $i ++) { $b = sqrt( $arr [ $i ]); $a = (int) $b ; // if both a and b are equal then // arr[i] is a perfect square if ( $a == $b ) { array_push ( $v1 , $i ); array_push ( $v2 , $arr [ $i ]); } } // sort second vector sort( $v2 ); // put the sorted perfect square // back into the array $j = 0; for ( $i = 0; $i < $n ; $i ++) { if ( $v1 [ $j ] == $i ) { $arr [ $i ] = $v2 [ $j ]; $j ++; } } // print final array for ( $i = 0; $i < $n ; $i ++) echo $arr [ $i ] . " " ; } // Driver Code $arr = array ( 9, 44, 100, 81, 21, 64 ); $n = count ( $arr ); sortPerfectSquare( $arr , $n ); // This code is contributed by Rajput-Ji ?> |
Javascript
<script> // Javascript program to sort all the elements that are // perfect squares in their relative positions // function to sort all the elements that are // perfect squares in their relative positions function sortPerfectSquare(arr, n) { var a; var b; // v1 will contain index of perfect squares // v2 will contain each perfect square var v1 = []; var v2 = []; for ( var i = 0; i < n; i++) { b = Math.sqrt(arr[i]); a = parseInt(b); // if both a and b are equal then // arr[i] is a perfect square if (a == b) { v1.push(i); v2.push(arr[i]); } } // sort second vector v2.sort((a,b) => a-b) // put the sorted perfect square // back into the array var j = 0; for ( var i = 0; i < n; i++) { if (v1[j] == i) { arr[i] = v2[j]; j++; } } // print final array for ( var i = 0; i < n; i++) document.write( arr[i] + " " ); } // Driver code var arr = [9, 44, 100, 81, 21, 64 ]; var n = arr.length; sortPerfectSquare(arr, n); </script> |
9 44 64 81 21 100
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 neveropen!