# 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[100005];    void SieveOfEratosthenes(int n) {        memset(prime, true, sizeof(prime));        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 void sortedArray(int arr[], int n) {     SieveOfEratosthenes(100005);        // vector v will store all non     // prime numbers     std::vector 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[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         List v = new List();            // 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:

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.