Move all negative elements to end

Move all negative elements to end

Given an unsorted array arr[] of size n having both negative and positive integers. The task is place all negative element at the end of array without changing the order of positive element and negative element.

Example 1:

Input : 
n = 8
arr[] = {1, -1, 3, 2, -7, -5, 11, 6 }
Output : 
1  3  2  11  6  -1  -7  -5

Example 2:

Input : 
n = 8
arr[] = {-5, 7, -3, -4, 9, 10, -1, 11}
Output :
7  9  10  11  -5  -3  -4  -1

Given an unsorted array arr[] of size n having both negative and positive integers. The task is place all negative element at the end of array without changing the order of positive element and negative element.

Example 1:

Input : 
n = 8
arr[] = {1, -1, 3, 2, -7, -5, 11, 6 }
Output : 
1  3  2  11  6  -1  -7  -5

Example 2:

Input : 
n = 8
arr[] = {-5, 7, -3, -4, 9, 10, -1, 11}
Output :
7  9  10  11  -5  -3  -4  -1

Code - using Two Arrays

class Solution{
    public:
    void segregateElements(int arr[],int n)
    {
        int arr1[n]; // positive
        int arr2[n]; // negative
        int i, n1, n2;
        for(i=0,n1=0,n2=0; i<n ; i++)
        {
            if(arr[i]>=0)
                arr1[n1++] = arr[i];
            else
                arr2[n2++] = arr[i];
        }
        for(int i=0  ;i < n1;i++)
            arr[i] = arr1[i];
            //  1 3 2 1 6 
            // -1 -7 -5 
        for(int i=0,j=n1; i < n2, j<n ; i++,j++)
            arr[j] = arr2[i];

    }
};

Code - using One Array

class Solution{
    public:
    void segregateElements(int arr[],int n)
    {int arr2[n], j=0;
        for(int i=0; i<n;i++ )
            if (arr[i] >=0)
                arr2[j++]= arr[i];
        for(int i=0; i<n;i++ )
            if (arr[i] <0)
                arr2[j++]= arr[i];
        for(int i=0; i<n;i++ )
            arr[i] = arr2[i];
    }
};

Code - using Vector

class Solution{
    public:
    void segregateElements(int arr[],int n)
    {
        vector<int>neg;
        vector<int>pos;
        int i, j ; 
        for(int i=0;i<n;i++)
         {
            if(arr[i]>=0)
                 pos.push_back(arr[i]);
             else
                 neg.push_back(arr[i]);
         }
        i=j=0;
        while(i<pos.size())
            arr[j++]=pos[i++];
        i=0;
        while(i<neg.size())
            arr[j++]=neg[i++];
    }
};