# Sort perfect squares in an array at their relative positions

• Last Updated : 09 Sep, 2022

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 ` `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);`   `    ``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 v1 = ``new` `Vector();` `    ``Vector v2 = ``new` `Vector();`   `    ``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

 ``

## Javascript

 ``

Output

`9 44 64 81 21 100 `

My Personal Notes arrow_drop_up
Recommended Articles
Page :