# 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[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 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