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> |
Output
9 44 64 81 21 100
Feeling lost in the world of random DSA topics, wasting time without progress? It’s time for a change! Join our DSA course, where we’ll guide you on an exciting journey to master DSA efficiently and on schedule.
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 neveropen!
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 neveropen!