# Sort only non-prime numbers of an array in increasing order

Given an array of N integers. The task is to print the sorted array such that all numbers that are prime stay in the same place, sort only the non prime numbers.

Examples:

```Input : arr[] = {10, 7, 6}
Output : 6 7 10

Input : arr[] = {100, 11, 500, 2, 17, 1}
Output : 1 11 100 2 17 500
```

## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

Approach:

• Traverse the array, take out all non prime numbers and store them in a vector.
• Now, sort the vector.
• Then, traverse the array again and check if a number is prime, if yes then print it as it is. Otherwise print a number from the vector.

To check whether a number is prime or not we can use sieve-of-eratosthenes.

Below is the implementation of above approach:

## C++

 `// C++ program to sort only non primes ` `#include ` `using` `namespace` `std; ` ` `  `// Create a boolean array "prime[0..n]" and initialize ` `// all entries it as true. A value in prime[i] will ` `// finally be false if i is Not a prime, else true. ` `bool` `prime; ` ` `  `void` `SieveOfEratosthenes(``int` `n) ` `{ ` ` `  `    ``memset``(prime, ``true``, ``sizeof``(prime)); ` ` `  `    ``prime = ``false``; ` ` `  `    ``for` `(``int` `p = 2; p * p <= n; p++) { ` `        ``// If prime[p] is not changed, then it is a prime ` `        ``if` `(prime[p] == ``true``) { ` `            ``// Update all multiples of p ` `            ``for` `(``int` `i = p * 2; i <= n; i += p) ` `                ``prime[i] = ``false``; ` `        ``} ` `    ``} ` `} ` ` `  `// Function to print the array such that ` `// only non primes are sorted ` `void` `sortedArray(``int` `arr[], ``int` `n) ` `{ ` `    ``SieveOfEratosthenes(100005); ` ` `  `    ``// vector v will store all non ` `    ``// prime numbers ` `    ``std::vector<``int``> v; ` ` `  `    ``// If not prime, insert into vector ` `    ``for` `(``int` `i = 0; i < n; ++i) { ` `        ``if` `(prime[arr[i]] == 0) ` `            ``v.push_back(arr[i]); ` `    ``} ` ` `  `    ``// sorting vector of non primes ` `    ``sort(v.begin(), v.end()); ` ` `  `    ``int` `j = 0; ` `    ``// print the required array ` `    ``for` `(``int` `i = 0; i < n; ++i) { ` `        ``if` `(prime[arr[i]] == ``true``) ` `            ``cout << arr[i] << ``" "``; ` `        ``else` `{ ` `            ``cout << v[j] << ``" "``; ` `            ``j++; ` `        ``} ` `    ``} ` `} ` ` `  `// Driver Code ` `int` `main() ` `{ ` ` `  `    ``int` `n = 6; ` `    ``int` `arr[] = { 100, 11, 500, 2, 17, 1 }; ` ` `  `    ``sortedArray(arr, n); ` ` `  `    ``return` `0; ` `} `

## Java

 `   `  `// Java program to sort only non primes ` `import` `java.util.*; ` `class` `solution ` `{ ` `// Create a boolean array "prime[0..n]" and initialize ` `// all entries it as true. A value in prime[i] will ` `// finally be false if i is Not a prime, else true. ` `static` `boolean` `prime[] = ``new` `boolean``[``100006``]; ` ` `  `static` `void` `SieveOfEratosthenes(``int` `n) ` `{ ` ` `  `    ``for``(``int` `i=``1``;i<=n;i++) ` `    ``prime[i]=``true``; ` `    ``prime[``1``] = ``false``; ` ` `  `    ``for` `(``int` `p = ``2``; p * p <= n; p++) { ` `        ``// If prime[p] is not changed, then it is a prime ` `        ``if` `(prime[p] == ``true``) { ` `            ``// Update all multiples of p ` `            ``for` `(``int` `i = p * ``2``; i <= n; i += p) ` `                ``prime[i] = ``false``; ` `        ``} ` `    ``} ` `} ` ` `  `// Function to print the array such that ` `// only non primes are sorted ` `static` `void` `sortedArray(``int` `arr[], ``int` `n) ` `{ ` `    ``SieveOfEratosthenes(``100005``); ` ` `  `    ``// vector v will store all non ` `    ``// prime numbers ` `    ``Vector v = ``new` `Vector(); ` ` `  `    ``// If not prime, insert into vector ` `    ``for` `(``int` `i = ``0``; i < n; ++i) { ` `        ``if` `(prime[arr[i]]==``false``) ` `            ``v.add(arr[i]); ` `    ``} ` ` `  `    ``// sorting vector of non primes ` `    ``Collections.sort(v); ` ` `  `    ``int` `j = ``0``; ` `    ``// print the required array ` `    ``for` `(``int` `i = ``0``; i < n; ++i) { ` `        ``if` `(prime[arr[i]] == ``true``) ` `            ``System.out.print( arr[i] + ``" "``); ` `        ``else` `{ ` `            ``System.out.print( v.get(j) + ``" "``); ` `            ``j++; ` `        ``} ` `    ``} ` `} ` ` `  `// Driver Code ` `public` `static` `void` `main(String args[]) ` `{ ` ` `  `    ``int` `n = ``6``; ` `    ``int` `arr[] = { ``100``, ``11``, ``500``, ``2``, ``17``, ``1` `}; ` ` `  `    ``sortedArray(arr, n); ` ` `  `} ` `} ` `//contributed by Arnab Kundu `

## Python3

 `# Python3 program to sort only  ` `# non primes ` ` `  `# from math import sqrt method ` `from` `math ``import` `sqrt ` ` `  `# Create a boolean array "prime[0..n]"  ` `# and initialize all entries it as true. ` `# A value in prime[i] will  finally be false  ` `# if i is Not a prime, else true.  ` `prime ``=` `[``0``] ``*` `100005` ` `  `def` `SieveOfEratosthenes(n) : ` ` `  `    ``for` `i ``in` `range``(``len``(prime)) : ` `        ``prime[i] ``=` `True` `         `  `    ``prime[``1``] ``=` `False` ` `  `    ``for` `p ``in` `range``(``2``, ``int``(sqrt(n)) ``+` `1``) : ` `         `  `        ``# If prime[p] is not changed,  ` `        ``# then it is a prime      ` `        ``if` `prime[p] ``=``=` `True` `: ` ` `  `            ``# Update all multiples of p  ` `            ``for` `i ``in` `range``(p ``*` `2``, n, p) : ` `                ``prime[i] ``=` `False` ` `  ` `  `# Function to print the array such that  ` `# only non primes are sorted  ` `def` `sortedArray(arr, n) : ` `     `  `    ``SieveOfEratosthenes(``100005``) ` ` `  `    ``# list v will store all non  ` `    ``# prime numbers  ` `    ``v ``=` `[] ` ` `  `    ``# If not prime, insert into list ` `    ``for` `i ``in` `range``(n) : ` `        ``if` `prime[arr[i]] ``=``=` `0` `: ` `            ``v.append(arr[i]) ` ` `  `    ``# sorting list of non primes  ` `    ``v.sort() ` ` `  `    ``j ``=` `0` ` `  `    ``# print the required array ` `    ``for` `i ``in` `range``(n) : ` ` `  `        ``if` `prime[arr[i]] ``=``=` `True` `: ` `            ``print``(arr[i],end ``=` `" "``) ` `        ``else` `: ` `            ``print``(v[j],end ``=` `" "``) ` `            ``j ``+``=` `1` `             `  ` `  `# Driver code ` `if` `__name__ ``=``=` `"__main__"` `: ` ` `  `    ``n ``=` `6` `    ``arr ``=` `[``100``, ``11``, ``500``, ``2``, ``17``, ``1``] ` `     `  `    ``sortedArray(arr, n) ` `     `  `# This code is contributed by  ` `# ANKITRAI1 `

## C#

 `// C# program to sort only non primes ` `using` `System; ` `using` `System.Collections.Generic; ` ` `  `class` `GFG ` `{ ` `    ``// Create a boolean array "prime[0..n]"  ` `    ``// and initialize all entries it as true. ` `    ``// A value in prime[i] will finally be ` `    ``// false if i is Not a prime, else true. ` `    ``static` `bool` `[]prime = ``new` `bool``; ` ` `  `    ``static` `void` `SieveOfEratosthenes(``int` `n) ` `    ``{ ` ` `  `        ``for``(``int` `i = 1; i <= n; i++) ` `        ``prime[i] = ``true``; ` `        ``prime = ``false``; ` ` `  `        ``for` `(``int` `p = 2; p * p <= n; p++)  ` `        ``{ ` `            ``// If prime[p] is not changed, then it is a prime ` `            ``if` `(prime[p] == ``true``) ` `            ``{ ` `                ``// Update all multiples of p ` `                ``for` `(``int` `i = p * 2; i <= n; i += p) ` `                    ``prime[i] = ``false``; ` `            ``} ` `        ``} ` `    ``} ` ` `  `    ``// Function to print the array such that ` `    ``// only non primes are sorted ` `    ``static` `void` `sortedArray(``int` `[]arr, ``int` `n) ` `    ``{ ` `        ``SieveOfEratosthenes(100005); ` ` `  `        ``// vector v will store all non ` `        ``// prime numbers ` `        ``List<``int``> v = ``new` `List<``int``>(); ` ` `  `        ``// If not prime, insert into vector ` `        ``for` `(``int` `i = 0; i < n; ++i) ` `        ``{ ` `            ``if` `(prime[arr[i]] == ``false``) ` `                ``v.Add(arr[i]); ` `        ``} ` ` `  `        ``// sorting vector of non primes ` `        ``v.Sort(); ` ` `  `        ``int` `j = 0; ` `        ``// print the required array ` `        ``for` `(``int` `i = 0; i < n; ++i)  ` `        ``{ ` `            ``if` `(prime[arr[i]] == ``true``) ` `                ``Console.Write( arr[i] + ``" "``); ` `            ``else` `            ``{ ` `                ``Console.Write( v[j] + ``" "``); ` `                ``j++; ` `            ``} ` `        ``} ` `    ``} ` ` `  `    ``// Driver Code ` `    ``public` `static` `void` `Main() ` `    ``{ ` ` `  `        ``int` `n = 6; ` `        ``int` `[]arr = { 100, 11, 500, 2, 17, 1 }; ` ` `  `        ``sortedArray(arr, n); ` `    ``} ` `} ` ` `  `/* This code contributed by PrinciRaj1992 */`

Output:

```1 11 100 2 17 500
```

Time Complexity: Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.

My Personal Notes arrow_drop_up Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.