Related Articles

# Segregating negative and positive maintaining order and O(1) space

• Difficulty Level : Medium
• Last Updated : 05 May, 2021

Segregation of negative and positive numbers in an array without using extra space, and maintaining insertion order and in O(n) time complexity.
Examples:

```Input :9
12 11 -13 -5 6 -7 5 -3 -6
Output :-13 -5 -7 -3 -6 12 11 6 5

Input :5
11 -13 6 -7 5
Output :-13 -7 11 6 5```

We have discussed this problem in below posts.

1. ers-beginning-positive-end-constant-extra-space/”>Rearrange positive and negative numbers without maintaining order.
2. Rearrange positive and negative numbers with constant extra space

In this post a new approach is discussed that takes O(1) extra space. We firs count total negative numbers, then move negative numbers one by one to correct position.

## C++

 `// C++ program to move all negative numbers``// to beginning and positive numbers to end``// keeping order.``#include ``using` `namespace` `std;` `void` `segregate(``int` `arr[], ``int` `n)``{``    ``// Count negative numbers``    ``int` `count_negative = 0;``    ``for` `(``int` `i = 0; i < n; i++)``        ``if` `(arr[i] < 0)``            ``count_negative++;   ` `    ``// Run a loop until all negative``    ``// numbers are moved to the beginning``    ``int` `i = 0, j = i + 1;``    ``while` `(i != count_negative) {` `        ``// If number is negative, update``        ``// position of next positive number.``        ``if` `(arr[i] < 0) {``            ``i++;``            ``j = i + 1;``        ``}` `        ``// If number is positive, move it to``        ``// index j and increment j.``        ``else` `if` `(arr[i] > 0 && j < n) {``            ``swap(arr[i], arr[j]);``            ``j++;``        ``}``    ``}``}` `int` `main()``{``    ``int` `count_negative = 0;``    ``int` `arr[] = { -12, 11, -13, -5, 6, -7, 5, -3, -6 };``    ``int` `n = ``sizeof``(arr) / ``sizeof``(arr);``    ``segregate(arr, n);``    ``for` `(``int` `i = 0; i < n; i++)``        ``cout << arr[i] << ``" "``;``}`

## Java

 `// Java program to move all``// negative numbers to beginning``// and positive numbers to end``// keeping order.``class` `GFG``{``static` `void` `segregate(``int` `arr[],``                      ``int` `n)``{``    ` `// Count negative numbers``int` `count_negative = ``0``;``for` `(``int` `i = ``0``; i < n; i++)``    ``if` `(arr[i] < ``0``)``        ``count_negative++;` `// Run a loop until all``// negative numbers are``// moved to the beginning``int` `i = ``0``, j = i + ``1``;``while` `(i != count_negative)``{` `    ``// If number is negative,``    ``// update position of next``    ``// positive number.``    ``if` `(arr[i] < ``0``)``    ``{``        ``i++;``        ``j = i + ``1``;``    ``}` `    ``// If number is positive, move``    ``// it to index j and increment j.``    ``else` `if` `(arr[i] > ``0` `&& j < n)``    ``{``        ``int` `t = arr[i];``        ``arr[i] = arr[j];``        ``arr[j] = t;``        ``j++;``    ``}``}``}` `// Driver code``public` `static` `void` `main(String[] args)``{``    ``int` `count_negative = ``0``;``    ``int` `arr[] = { -``12``, ``11``, -``13``, -``5``,``                   ``6``, -``7``, ``5``, -``3``, -``6` `};``    ``int` `n = arr.length;``    ``segregate(arr, n);``    ``for` `(``int` `i = ``0``; i < n; i++)``        ``System.out.print(arr[i] + ``" "``);``}``}` `// This code is contributed``// by ChitraNayal`

## C#

 `// C# program to move all``// negative numbers to beginning``// and positive numbers to end``// keeping order.``using` `System;` `class` `GFG``{``static` `void` `segregate(``int``[] arr,``                      ``int` `n)``{``    ` `// Count negative numbers``int` `count_negative = 0,i;``for` `(i = 0; i < n; i++)``    ``if` `(arr[i] < 0)``        ``count_negative++;` `// Run a loop until all``// negative numbers are``// moved to the beginning``i = 0;``int` `j = i + 1;``while` `(i != count_negative)``{` `    ``// If number is negative,``    ``// update position of next``    ``// positive number.``    ``if` `(arr[i] < 0)``    ``{``        ``i++;``        ``j = i + 1;``    ``}` `    ``// If number is positive, move``    ``// it to index j and increment j.``    ``else` `if` `(arr[i] > 0 && j < n)``    ``{``        ``int` `t = arr[i];``        ``arr[i] = arr[j];``        ``arr[j] = t;``        ``j++;``    ``}``}``}` `// Driver code``public` `static` `void` `Main()``{``    ``int``[] arr = { -12, 11, -13, -5,``                    ``6, -7, 5, -3, -6 };``    ``int` `n = arr.Length;``    ``segregate(arr, n);``    ``for` `(``int` `i = 0; i < n; i++)``        ``Console.Write(arr[i] + ``" "``);``}``}` `// This code is contributed``// by ChitraNayal`

## Python 3

 `# Python 3 program to move all``# negative numbers to beginning``# and positive numbers to end``# keeping order.` `def` `segregate(arr, n):``    ` `    ``# Count negative numbers``    ``count_negative ``=` `0``    ``for` `i ``in` `range``(n):``        ``if` `(arr[i] < ``0``):``            ``count_negative ``+``=` `1` `    ``# Run a loop until all``    ``# negative numbers are``    ``# moved to the beginning``    ``i ``=` `0``    ``j ``=` `i ``+` `1``    ``while` `(i !``=` `count_negative):` `        ``# If number is negative,``        ``# update position of next``        ``# positive number.``        ``if` `(arr[i] < ``0``) :``            ``i ``+``=` `1``            ``j ``=` `i ``+` `1` `        ``# If number is positive, move``        ``# it to index j and increment j.``        ``elif` `(arr[i] > ``0` `and` `j < n):``            ``t ``=` `arr[i]``            ``arr[i] ``=` `arr[j]``            ``arr[j] ``=` `t``            ``j ``+``=` `1``        ` `# Driver Code``count_negative ``=` `0``arr ``=` `[``-``12``, ``11``, ``-``13``, ``-``5``,``        ``6``, ``-``7``, ``5``, ``-``3``, ``-``6` `]``segregate(arr, ``9``)``for` `i ``in` `range``(``9``):``    ``print``(arr[i] , end ``=``" "``)` `# This code is contributed``# by ChitraNayal`

## PHP

 ` 0 && ``\$j` `< ``\$n``)``        ``{``            ``\$t` `= ``\$arr``[``\$i``];``            ``\$arr``[``\$i``] = ``\$arr``[``\$j``];``            ``\$arr``[``\$j``] = ``\$t``;``            ``\$j``++;``        ``}``    ``}``}` `// Driver Code``\$count_negative` `= 0;``\$arr` `= ``array``(-12, 11, -13, -5,``              ``6, -7, 5, -3, -6);``\$n` `= sizeof(``\$arr``);``segregate(``\$arr``, ``\$n``);``for` `(``\$i` `= 0; ``\$i` `< ``\$n``; ``\$i``++)``    ``echo` `\$arr``[``\$i``] .``" "``;``    ` `// This code is contributed``// by ChitraNayal``?>`

## Javascript

 ``

Output:

`-12 -13 -5 -7 -3 -6 11 6 5 `

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.  To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

In case you wish to attend live classes with experts, please refer DSA Live Classes for Working Professionals and Competitive Programming Live for Students.

My Personal Notes arrow_drop_up