Segregation of negative and positive numbers in an array without using extra space, and maintaining insertion order and in O(n^2) 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 below posts.
- ers-beginning-positive-end-constant-extra-space/”>Rearrange positive and negative numbers without maintaining order.
- Rearrange positive and negative numbers with constant extra space
This post discusses a new approach that takes O(1) extra space. We first count total negative numbers, then move negative numbers one by one to the correct position.
Implementation:
C++
// C++ program to move all negative numbers // to beginning and positive numbers to end // keeping order. #include <iostream> 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[0]);
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
<?php // PHP program to move all // negative numbers to // beginning and positive // numbers to end keeping order. function segregate(& $arr , $n )
{ // Count negative numbers
$count_negative = 0;
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;
$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 )
{
$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
<script> // JavaScript program to move all negative numbers // to beginning and positive numbers to end // keeping order. function segregate(arr, n)
{ // Count negative numbers
let count_negative = 0;
for (let i = 0; i < n; i++)
if (arr[i] < 0)
count_negative++;
// Run a loop until all negative
// numbers are moved to the beginning
let 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) {
let t = arr[i];
arr[i] = arr[j];
arr[j] = t;
j++;
}
}
} let count_negative = 0;
let arr = [ -12, 11, -13, -5, 6, -7, 5, -3, -6 ];
let n = arr.length;
segregate(arr, n);
for (let i = 0; i < n; i++)
document.write(arr[i] + " " );
// This code is contributed by Surbhi Tyagi. </script> |
Output
-12 -13 -5 -7 -3 -6 11 6 5
Complexity Analysis:
- Time Complexity: O(n2)
- Auxiliary Space: O(1)
Recommended Articles