Open In App

Move all zeros to start and ones to end in an Array of random integers

Improve
Improve
Improve
Like Article
Like
Save Article
Save
Share
Report issue
Report

Given an array arr[] of random integers, the task is to push all the zero’s in the array to the start and all the one’s to the end of the array. Note that the order of all the other elements should be the same.
Example: 
 

Input: arr[] = {1, 2, 0, 4, 3, 0, 5, 0} 
Output: 0 0 0 2 4 3 5 1 
Input: arr[] = {1, 2, 0, 0, 0, 3, 6}; 
Output: 0 0 0 2 3 6 1 
 

 

Approach: Traverse the array from left to right and move all the elements which are not equal to 1 at the beginning and then put 1’s in the rest of the indices at the end of the array. Now, find the index of the last element which is not equal to 1 say lastInd and then starting from this index to the beginning of the array push all the elements which are not equal to 0 in the end till lastInd and then put 0’s in the beginning.
Below is the implementation of the above approach: 
 

C++




// C++ implementation of the approach
#include <iostream>
using namespace std;
 
// Utility function to print the contents of an array
void printArr(int arr[], int n)
{
    for (int i = 0; i < n; i++)
        cout << arr[i] << " ";
}
 
// Function that pushes all the zeros to the start and ones
// to the end of an array
void pushBinaryToBorder(int arr[], int n)
{
    // To store the count of elements which are not equal to 1
    int count1 = 0;
    // Traverse the array and calculate count of elements
    // which are not 1
    for (int i = 0; i < n; i++)
        if (arr[i] != 1)
            arr[count1++] = arr[i];
 
    // Now all non-ones elements have been shifted to front
    // and 'count1' is set as index of first 1. Make all
    // elements 1 from count to end.
    while (count1 < n)
        arr[count1++] = 1;
    // Initialize lastNonBinary position to zero
    int lastNonOne = 0;
 
    // Traverse the array and pull non-zero elements to the
    // required indices
    for (int i = n - 1; i >= 0; i--) {
        // Ignore the 1's
        if (arr[i] == 1)
            continue;
        // Mark the position Of last NonBinary integer
        if (!lastNonOne)
            lastNonOne = i;
        // Place non-zero element to their required indices
        if (arr[i] != 0)
            arr[lastNonOne--] = arr[i];
    }
 
    // Put zeros to start of array
    while (lastNonOne >= 0)
        arr[lastNonOne--] = 0;
}
 
// Driver code
int main()
{
    int arr[] = { 1, 2, 0, 0, 0, 3, 6 };
    int n = sizeof(arr) / sizeof(arr[0]);
    pushBinaryToBorder(arr, n);
    printArr(arr, n);
    return 0;
}


C




// C implementation of the approach
#include <stdio.h>
 
// Utility function to print the contents of an array
void printArr(int arr[], int n)
{
    for (int i = 0; i < n; i++)
        printf("%d ", arr[i]);
}
 
// Function that pushes all the zeros to the start and ones
// to the end of an array
void pushBinaryToBorder(int arr[], int n)
{
    // To store the count of elements which are not equal to 1
    int count1 = 0;
    // Traverse the array and calculate count of elements
    // which are not 1
    for (int i = 0; i < n; i++)
        if (arr[i] != 1)
            arr[count1++] = arr[i];
 
    // Now all non-ones elements have been shifted to front
    // and 'count1' is set as index of first 1. Make all
    // elements 1 from count to end.
    while (count1 < n)
        arr[count1++] = 1;
    // Initialize lastNonBinary position to zero
    int lastNonOne = 0;
 
    // Traverse the array and pull non-zero elements to the
    // required indices
    for (int i = n - 1; i >= 0; i--) {
        // Ignore the 1's
        if (arr[i] == 1)
            continue;
        // Mark the position Of last NonBinary integer
        if (!lastNonOne)
            lastNonOne = i;
        // Place non-zero element to their required indices
        if (arr[i] != 0)
            arr[lastNonOne--] = arr[i];
    }
 
    // Put zeros to start of array
    while (lastNonOne >= 0)
        arr[lastNonOne--] = 0;
}
 
// Driver code
int main()
{
    int arr[] = { 1, 2, 0, 0, 0, 3, 6 };
    int n = sizeof(arr) / sizeof(arr[0]);
    pushBinaryToBorder(arr, n);
    printArr(arr, n);
    return 0;
}
 
// This code is contributed by Sania Kumari Gupta


Java




// Java implementation of the approach
import java.util.*;
 
class GFG
{
 
// Utility function to print
// the contents of an array
static void printArr(int arr[], int n)
{
    for (int i = 0; i < n; i++)
        System.out.print(arr[i]+" ");
}
 
// Function that pushes all the zeros
// to the start and ones to the end of an array
static void pushBinaryToBorder(int arr[], int n)
{
 
    // To store the count of elements
    // which are not equal to 1
    int count1 = 0;
 
    // Traverse the array and calculate
    // count of elements which are not 1
    for (int i = 0; i < n; i++)
        if (arr[i] != 1)
            arr[count1++] = arr[i];
 
    // Now all non-ones elements have been shifted to
    // front and 'count1' is set as index of first 1.
    // Make all elements 1 from count to end.
    while (count1 < n)
        arr[count1++] = 1;
 
    // Initialize lastNonBinary position to zero
    int lastNonOne = 0;
 
    // Traverse the array and pull non-zero
    // elements to the required indices
    for (int i = n - 1; i >= 0; i--)
    {
 
        // Ignore the 1's
        if (arr[i] == 1)
            continue;
        if (lastNonOne == 0)
        {
 
            // Mark the position Of
            // last NonBinary integer
            lastNonOne = i;
        }
 
        // Place non-zero element to
        // their required indices
        if (arr[i] != 0)
            arr[lastNonOne--] = arr[i];
    }
 
    // Put zeros to start of array
    while (lastNonOne >= 0)
        arr[lastNonOne--] = 0;
}
 
// Driver code
public static void main(String args[])
{
    int arr[] = { 1, 2, 0, 0, 0, 3, 6 };
    int n = arr.length;
    pushBinaryToBorder(arr, n);
    printArr(arr, n);
 
}
}
 
// This code is contributed by SURENDRA_GANGWAR.


Python3




# Python3 implementation of the approach
 
# Utility function to print
# the contents of an array
def printArr(arr, n) :
 
    for i in range(n) :
        print(arr[i],end=" ")
 
 
# Function that pushes all the zeros
# to the start and ones to the end of an array
def pushBinaryToBorder(arr, n) :
 
    # To store the count of elements
    # which are not equal to 1
    count1 = 0
     
    # Traverse the array and calculate
    # count of elements which are not 1
    for i in range(n) :
        if (arr[i] != 1) :
            arr[count1] = arr[i]
            count1 += 1
 
    # Now all non-ones elements have been shifted to
    # front and 'count1' is set as index of first 1.
    # Make all elements 1 from count to end.
    while (count1 < n) :
        arr[count1] = 1
        count1 += 1
 
    # Initialize lastNonBinary position to zero
    lastNonOne = 0
 
    # Traverse the array and pull non-zero
    # elements to the required indices
    for i in range(n - 1, -1, -1) :
 
        # Ignore the 1's
        if (arr[i] == 1) :
            continue
             
        if (not lastNonOne) :
 
            # Mark the position Of
            # last NonBinary integer
            lastNonOne = i
 
        # Place non-zero element to
        # their required indices
        if (arr[i] != 0) :
            arr[lastNonOne] = arr[i]
            lastNonOne -= 1
 
    # Put zeros to start of array
    while (lastNonOne >= 0) :
        arr[lastNonOne] = 0
        lastNonOne -= 1
 
# Driver code
if __name__ == "__main__" :
     
    arr = [ 1, 2, 0, 0, 0, 3, 6 ];
    n = len(arr);
    pushBinaryToBorder(arr, n)
    printArr(arr, n)
 
# This code is contributed by Ryuga


C#




// C# implementation of the approach
using System;
 
class GFG
{
 
// Utility function to print
// the contents of an array
static void printArr(int []arr, int n)
{
    for (int i = 0; i < n; i++)
        Console.Write(arr[i] + " ");
}
 
// Function that pushes all the zeros
// to the start and ones to the end of an array
static void pushBinaryToBorder(int [] arr, int n)
{
 
    // To store the count of elements
    // which are not equal to 1
    int count1 = 0;
 
    // Traverse the array and calculate
    // count of elements which are not 1
    for (int i = 0; i < n; i++)
        if (arr[i] != 1)
            arr[count1++] = arr[i];
 
    // Now all non-ones elements have been shifted to
    // front and 'count1' is set as index of first 1.
    // Make all elements 1 from count to end.
    while (count1 < n)
        arr[count1++] = 1;
 
    // Initialize lastNonBinary position to zero
    int lastNonOne = 0;
 
    // Traverse the array and pull non-zero
    // elements to the required indices
    for (int i = n - 1; i >= 0; i--)
    {
 
        // Ignore the 1's
        if (arr[i] == 1)
            continue;
        if (lastNonOne == 0)
        {
 
            // Mark the position Of
            // last NonBinary integer
            lastNonOne = i;
        }
 
        // Place non-zero element to
        // their required indices
        if (arr[i] != 0)
            arr[lastNonOne--] = arr[i];
    }
 
    // Put zeros to start of array
    while (lastNonOne >= 0)
        arr[lastNonOne--] = 0;
}
 
// Driver code
public static void Main()
{
    int []arr = { 1, 2, 0, 0, 0, 3, 6 };
    int n = arr.Length;
    pushBinaryToBorder(arr, n);
    printArr(arr, n);
}
}
 
// This code is contributed by Mohit kumar 29.


Javascript




<script>
 
// Javascript implementation of the approach
 
// Utility function to print
// the contents of an array
function printArr(arr, n)
{
    for (var i = 0; i < n; i++)
        document.write( arr[i] + " ");
}
 
// Function that pushes all the zeros
// to the start and ones to the end of an array
function pushBinaryToBorder(arr, n)
{
 
    // To store the count of elements
    // which are not equal to 1
    var count1 = 0;
 
    // Traverse the array and calculate
    // count of elements which are not 1
    for (var i = 0; i < n; i++)
        if (arr[i] != 1)
            arr[count1++] = arr[i];
 
    // Now all non-ones elements have been shifted to
    // front and 'count1' is set as index of first 1.
    // Make all elements 1 from count to end.
    while (count1 < n)
        arr[count1++] = 1;
 
    // Initialize lastNonBinary position to zero
    var lastNonOne = 0;
 
    // Traverse the array and pull non-zero
    // elements to the required indices
    for (var i = n - 1; i >= 0; i--) {
 
        // Ignore the 1's
        if (arr[i] == 1)
            continue;
        if (!lastNonOne) {
 
            // Mark the position Of
            // last NonBinary integer
            lastNonOne = i;
        }
 
        // Place non-zero element to
        // their required indices
        if (arr[i] != 0)
            arr[lastNonOne--] = arr[i];
    }
 
    // Put zeros to start of array
    while (lastNonOne >= 0)
        arr[lastNonOne--] = 0;
}
 
// Driver code
var arr = [ 1, 2, 0, 0, 0, 3, 6 ];
var n = arr.length;
pushBinaryToBorder(arr, n);
printArr(arr, n);
 
 
</script>


Output: 

0 0 0 2 3 6 1

 

Time Complexity: O(N), where N represents the size of the given array.

Auxiliary Space: O(1), no extra space is required, so it is a constant.



Last Updated : 02 Aug, 2022
Like Article
Save Article
Previous
Next
Share your thoughts in the comments
Similar Reads