Separate 0s and 1s in an array

Problem :

Given an array of 0’s and 1’s in random order , you need to separate 0’s and 1’s in an array.
For example:

arr[] = {0,1,0,0,1,1,1,0,1}
Array after separating odd and even numbers :
{0,0,0,0,1,1,1,1,1}

Solution :

Solution 1:

  • Count number of 0’s in the array. Lets say we get X 0’s
  • Once we get the count, put X 0’s in the array and put (n-X) 1’s in the latter part of array.
Java code:

public static int[] separate0s1sSolution1(int arr[])
 {
  int count=0;
  for (int i = 0; i < arr.length; i++) {
   if(arr[i]==0)
   {
    count++;
   }
  }
  for (int i = 0; i < count; i++) {
   arr[i]=0;
  }
  for (int i = count; i < arr.length; i++) {
   arr[i]=1;
  }
  return arr;
 }
Time Complexity : O(N)

Solution 2:

Algorithm: 

Lets say array is arr[]

  • Initialise two index variable , left=0 and right=arr.length-1
  • Increment left variable until you get 1's.
  • Decrement right variable until you get 0's
  • If left < right, swap arr[left] and arr[right]
  • In the end, you will see that you have 0's on left side and 1's on right side.

Java code:

public static int[] separate0s1sSolution2(int arr[])
 {
  for (int i = 0; i < arr.length; i++) {
   int left=0;
   int right=arr.length-1;
   while(arr[left]==0)
   {
    left++;
   }
   while(arr[right]==1)
   {
    right--;
   }

   if(left

Java code to separate odd and even numbers in an array :

package org.arpit.java2blog;

public class Separate0s1sMain {

 public static void main(String[] args) {
  int arr[]={0,1,0,0,1,1,1,0,1};
  System.out.println("Original Array: ");
  for (int i = 0; i < arr.length; i++) {
   System.out.print(arr[i]+" ");
  }
  arr=separate0s1sSolution1(arr);
  System.out.println("n===========================");
  System.out.println("Solution 1");
  System.out.println("nArray after separating 0's and 1's : ");
  for (int i = 0; i < arr.length; i++) {
   System.out.print(arr[i]+" ");
  }
  System.out.println("n===========================");
  System.out.println("Solution 2");
  arr=separate0s1sSolution2(arr);
  System.out.println("nArray after separating 0's and 1's : ");
  for (int i = 0; i < arr.length; i++) {
   System.out.print(arr[i]+" ");
  } 
 }

 public static int[] separate0s1sSolution1(int arr[])
 {
  int count=0;
  for (int i = 0; i < arr.length; i++) {
   if(arr[i]==0)
   {
    count++;
   }
  }
  for (int i = 0; i < count; i++) {
   arr[i]=0;
  }
  for (int i = count; i < arr.length; i++) {
   arr[i]=1;
  }
  return arr;
 }
 public static int[] separate0s1sSolution2(int arr[])
 {
  for (int i = 0; i < arr.length; i++) {
   int left=0;
   int right=arr.length-1;
   while(arr[left]==0)
   {
    left++;
   }
   while(arr[right]==1)
   {
    right--;
   }

   if(left

when you run above program, you will get below output:

Original Array: 
0 1 0 0 1 1 1 0 1 
===========================
Solution 1

Array after separating 0's and 1's : 
0 0 0 0 1 1 1 1 1 
===========================
Solution 2

Array after separating 0's and 1's : 
0 0 0 0 1 1 1 1 1
[social_share share_on="facebook,twitter,linkedin,whatsapp"][post_navigator in_same_term="true"]

Comments

  1. package com.learn.dec.array;

    public class SeperateZeroOnes {

    public static void main(String[] args) {
    int arr[]={0,1,0,0,1,1,1,0,1};

    System.out.println(“Original Array: “);
    for (int i = 0; i < arr.length; i++) {
    System.out.print(arr[i]+" ");
    }

    int l = 0 , r = arr.length – 1;

    while (l arr[r]){

    int temp = arr[l] ;
    arr[l] = arr[r];
    arr[r] = temp;
    }
    l++;
    r–;

    }
    System.out.println(“\nSorted Array: “);
    for (int i = 0; i < arr.length; i++) {
    System.out.print(arr[i]+" ");
    }

    }

    }

Leave a Reply

Your email address will not be published. Required fields are marked *

Subscribe to our newletter

Get quality tutorials to your inbox. Subscribe now.