Move all negative elements to end in order with extra space allowed

06 Jul, 2022
Given an unsorted array arr[] of both negative and positive integer. The task is place all negative element at the end of array without changing the order of positive element and negative element. 
Examples: 
Input : arr[] = {1, -1, 3, 2, -7, -5, 11, 6 }
Output : 1  3  2  11  6  -1  -7  -5 

Input : arr[] = {-5, 7, -3, -4, 9, 10, -1, 11}
Output : 7  9  10  11  -5  -3  -4  -1  
We have discussed different approaches to this problem in below post.Rearrange positive and negative numbers with constant extra space
The problem becomes easier if we are allowed to use extra space. Idea is create an empty array (temp[]). First we store all positive element of given array and then we store all negative element of array in Temp[]. Finally we copy temp[] to original array.
Implementation:
C++
Java
Python3
C#
PHP
Javascript
// C++ program to Move All -ve Element At End// Without changing order Of Array Element#include<bits/stdc++.h>using namespace std; // Moves all -ve element to end of array in// same order.void segregateElements(int arr[], int n){    // Create an empty array to store result    int temp[n];     // Traversal array and store +ve element in    // temp array    int j = 0; // index of temp    for (int i = 0; i < n ; i++)        if (arr[i] >= 0 )            temp[j++] = arr[i];     // If array contains all positive or all negative.    if (j == n || j == 0)        return;     // Store -ve element in temp array    for (int i = 0 ; i < n ; i++)        if (arr[i] < 0)            temp[j++] = arr[i];     // Copy contents of temp[] to arr[]    memcpy(arr, temp, sizeof(temp));} // Driver programint main(){    int arr[] = {1 ,-1 ,-3 , -2, 7, 5, 11, 6 };    int n = sizeof(arr)/sizeof(arr[0]);     segregateElements(arr, n);     for (int i = 0; i < n; i++)    cout << arr[i] << " ";     return 0;}
// Java program to Move All -ve Element At End// Without changing order Of Array Elementimport java.util.Arrays; class GFG {         // Moves all -ve element to end of array in    // same order.    static void segregateElements(int arr[], int n)    {                 // Create an empty array to store result        int temp[] = new int[n];         // Traversal array and store +ve element in        // temp array        int j = 0; // index of temp                 for (int i = 0; i < n; i++)            if (arr[i] >= 0)                temp[j++] = arr[i];         // If array contains all positive or all        // negative.        if (j == n || j == 0)            return;         // Store -ve element in temp array        for (int i = 0; i < n; i++)            if (arr[i] < 0)                temp[j++] = arr[i];         // Copy contents of temp[] to arr[]        for (int i = 0; i < n; i++)            arr[i] = temp[i];    }         // Driver code    public static void main(String arg[])    {        int arr[] = { 1, -1, -3, -2, 7, 5, 11, 6 };        int n = arr.length;         segregateElements(arr, n);         for (int i = 0; i < n; i++)            System.out.print(arr[i] + " ");    }} // This code is contributed by Anant Agarwal.
# Python program to Move All -ve Element At End# Without changing order Of Array Element # Moves all -ve element to end of array in# same order.def move(arr,n):    j = 0    ans=[None]*n    i=0;j=n-1    for k in range(n):        if arr[k]>=0:          ans[i]=arr[k]          i+=1        else:          ans[j]=arr[k]          j-=1    ans[i:]=ans[n-1:i-1:-1]    return ans # Driver programarr = [1 ,-1 ,-3 , -2, 7, 5, 11, 6 ]n = len(arr)print(move(arr, n))  # Contributed by Venkatesh hegde
// C# program to Move All -ve Element At End// Without changing order Of Array Elementusing System; class GFG {     // Moves all -ve element to    // end of array in same order.    static void segregateElements(int[] arr, int n)    {        // Create an empty array to store result        int[] temp = new int[n];         // Traversal array and store +ve element in        // temp array        int j = 0; // index of temp         for (int i = 0; i < n; i++)            if (arr[i] >= 0)                temp[j++] = arr[i];         // If array contains all positive or all        // negative.        if (j == n || j == 0)            return;         // Store -ve element in temp array        for (int i = 0; i < n; i++)            if (arr[i] < 0)                temp[j++] = arr[i];         // Copy contents of temp[] to arr[]        for (int i = 0; i < n; i++)            arr[i] = temp[i];    }     // Driver code    public static void Main()    {        int[] arr = { 1, -1, -3, -2, 7, 5, 11, 6 };        int n = arr.Length;        segregateElements(arr, n);         for (int i = 0; i < n; i++)            Console.Write(arr[i] + " ");    }} // This Code is contributed by vt_m.
<?php// PHP program to Move All -ve Element At End// Without changing order Of Array Element // Moves all -ve element to end of// array in same order.function segregateElements(&$arr, $n){    // Create an empty array to store result    $temp = array(0, $n, NULL);     // Traversal array and store +ve    // element in temp array    $j = 0; // index of temp    for ($i = 0; $i < $n ; $i++)        if ($arr[$i] >= 0 )            $temp[$j++] = $arr[$i];     // If array contains all positive    // or all negative.    if ($j == $n || $j == 0)        return;     // Store -ve element in temp array    for ($i = 0 ; $i < $n ; $i++)        if ($arr[$i] < 0)            $temp[$j++] = $arr[$i];     // Copy contents of temp[] to arr[]    for($i = 0; $i < $n; $i++)        $arr[$i] = $temp[$i];} // Driver Code$arr = array(1 ,-1 ,-3 , -2, 7, 5, 11, 6 );$n = sizeof($arr); segregateElements($arr, $n); for ($i = 0; $i < $n; $i++)echo $arr[$i] ." "; // This code is contributed// by ChitraNayal?>
<script> // Javascript program to Move All -ve Element At End// Without changing order Of Array Element // Moves all -ve element to end of array in// same order.function segregateElements(arr, n){    // Create an empty array to store result    let temp= new Array(n);     // Traversal array and store +ve element in    // temp array    let j = 0; // index of temp    for (let i = 0; i < n ; i++)        if (arr[i] >= 0 )            temp[j++] = arr[i];     // If array contains all positive or all negative.    if (j == n || j == 0)        return;     // Store -ve element in temp array    for (let i = 0 ; i < n ; i++)        if (arr[i] < 0)            temp[j++] = arr[i];    for (let i = 0; i < n ; i++) arr[i] = temp[i];} // Driver program let arr= [1 ,-1 ,-3 , -2, 7, 5, 11, 6];let n = arr.length; segregateElements(arr, n); for (let i = 0; i < n; i++)document.write(arr[i] + " "); </script>
1 7 5 11 6 -1 -3 -2 
Time Complexity : O(n) Auxiliary space : O(n) 
Related Articles: Rearrange positive and negative numbers with constant extra space Rearrange positive and negative numbers in O(n) time and O(1) extra space
This article is contributed by Nishant_Singh (Pintu). If you like GeeksforGeeks and would like to contribute, you can also write an article using write.geeksforgeeks.org or mail your article to review-team@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks. 
ukasp
mohit kumar 29
venkateshhegde18
vyomkeshpandey
amartyaghoshgfg
tarakki100
hardikkoriintern
array-rearrange
Arrays
Arrays
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.