Move all zeroes to end of array using Two-Pointers - GeeksforGeeks

25 May, 2021
Given an array of random numbers, Push all the zero’s of the given array to the end of the array. For example, if the given arrays is {1, 0, 2, 6, 0, 4}, it should be changed to {1, 2, 6, 4, 0, 0}. The order of all other elements should be the same.Examples:  
Input: arr[]={8, 9, 0, 1, 2, 0, 3}
Output: arr[]={8, 9, 1, 2, 3, 0, 0}
Explanation: 
Swap {0 ,1} -> Resulting array {8, 9, 1, 0, 2, 0, 3}
Swap {0 ,2} -> Resulting array {8, 9, 1, 2, 0, 0, 3}
Swap {0 ,3} -> Final array {8, 9, 1, 2, 3, 0, 0}

Input: arr[]={4, 5, 0, 0, 0, 0, 6, 7}
Output: arr[]={4, 5, 6, 7, 0, 0, 0, 0}
 
Approach:  
Iterate the array from 0 to N.  Keep two pointers, one for zero elements and other for non-zero elements.  Swap every zero elements with the non-zero element that comes just after it.  
Iterate the array from 0 to N.  
Keep two pointers, one for zero elements and other for non-zero elements.  
Swap every zero elements with the non-zero element that comes just after it.  
 
C
C++
Java
Python3
C#
Javascript
// C implementation to move all zeroes at// the end of array#include<stdio.h> // Function to move all zeroes at// the end of arrayvoid moveZerosToEnd(int arr[], int n){    int j=0, temp, i;         // Traverse the array. If arr[i] is    // non-zero and arr[j] is zero,    // then swap both the element    for(i=0;i<n;i++)    {        if(arr[i]!=0 && arr[j]==0)            {             temp=arr[i];             arr[i]=arr[j];             arr[j]=temp;            }        if(arr[j]!=0)            j+=1;    }} // Function to print the array elementsvoid printArray(int arr[], int n){    for (int i = 0; i < n; i++)         printf("%d ", arr[i]);} // Driver Codeint main(){    int arr[] = {8, 9, 0, 1, 2, 0, 3};    int n = sizeof(arr) / sizeof(arr[0]);     printf("Original array: ");    printArray(arr, n);     moveZerosToEnd(arr, n);     printf("\nModified array: ");    printArray(arr, n);     return 0;}
// C++ implementation to move all zeroes at// the end of array#include <iostream>using namespace std; // Function to move all zeroes at// the end of arrayvoid moveZerosToEnd(int arr[], int n){    int j=0, temp, i;         // Traverse the array. If arr[i] is    // non-zero and arr[j] is zero,    // then swap both the element    for(i=0;i<n;i++)    {        if(arr[i]!=0 && arr[j]==0)            {             swap(arr[i],arr[j]);            }        if(arr[j]!=0)            j+=1;    }} // Function to print the array elementsvoid printArray(int arr[], int n){    for (int i = 0; i < n; i++)        cout << arr[i] << " ";} // Driver Codeint main(){    int arr[] = {8, 9, 0, 1, 2, 0, 3};    int n = sizeof(arr) / sizeof(arr[0]);     cout << "Original array: ";    printArray(arr, n);     moveZerosToEnd(arr, n);     cout << "\nModified array: ";    printArray(arr, n);     return 0;}
// Java implementation to move all zeroes at// the end of array class GFG {     // Function to move all zeroes at    // the end of array    static void moveZerosToEnd(int arr[], int n) {        int j = 0, i;         // Traverse the array. If arr[i] is        // non-zero and arr[j] is zero,        // then swap both the element        for (i = 0; i < n; i++) {            if (arr[i] != 0 && arr[j] == 0) {                arr = swap(arr, i, j);            }            if (arr[j] != 0)                j += 1;        }    }     static int[] swap(int[] arr, int i, int j) {        int temp = arr[i];        arr[i] = arr[j];        arr[j] = temp;        return arr;    }     // Function to print the array elements    static void printArray(int arr[], int n) {        for (int i = 0; i < n; i++)            System.out.print(arr[i] + " ");    }     // Driver Code    public static void main(String[] args)    {        int arr[] = { 8, 9, 0, 1, 2, 0, 3 };        int n = arr.length;         System.out.print("Original array: ");        printArray(arr, n);         moveZerosToEnd(arr, n);         System.out.print("\nModified array: ");        printArray(arr, n);     }} // This code is contributed by 29AjayKumar
# Python3 implementation to move all zeroes at# the end of array # Function to move all zeroes at# the end of arraydef moveZerosToEnd(nums):    j = 0         for i in range(len(nums)):        if nums[i]!= 0 and nums[j]== 0:            nums[i], nums[j]= nums[j], nums[i]        if nums[j]!= 0:            j+= 1       # Function to print the array elementsdef printArray(arr, n):     for i in range(0, n):        print(arr[i],end=" ")  # Driver program to test abovearr = [8, 9, 0, 1, 2, 0, 3]n = len(arr) print("Original array:", end=" ")printArray(arr, n) moveZerosToEnd(arr) print("\nModified array: ", end=" ")printArray(arr, n)
// C# implementation to move all zeroes// at the end of arrayusing System; class GFG{ // Function to move all zeroes// at the end of arraystatic void moveZerosToEnd(int []arr, int n){    int j = 0, i;     // Traverse the array. If arr[i]    // is non-zero and arr[j] is zero,    // then swap both the element    for(i = 0; i < n; i++)    {       if (arr[i] != 0 && arr[j] == 0)       {           arr = swap(arr, i, j);       }       if (arr[j] != 0)           j += 1;    }} static int[] swap(int[] arr, int i, int j){    int temp = arr[i];    arr[i] = arr[j];    arr[j] = temp;    return arr;} // Function to print the array elementsstatic void printArray(int []arr, int n){    for(int i = 0; i < n; i++)       Console.Write(arr[i] + " ");} // Driver Codepublic static void Main(String[] args){    int []arr = { 8, 9, 0, 1, 2, 0, 3 };    int n = arr.Length;     Console.Write("Original array: ");    printArray(arr, n);     moveZerosToEnd(arr, n);     Console.Write("\nModified array: ");    printArray(arr, n);}} // This code is contributed by 29AjayKumar
<script> // JavaScript implementation to move all zeroes at// the end of array // Function to move all zeroes at// the end of arrayfunction moveZerosToEnd(arr, n){    let j=0, temp, i;         // Traverse the array. If arr[i] is    // non-zero and arr[j] is zero,    // then swap both the element    for(i=0;i<n;i++)    {        if(arr[i]!=0 && arr[j]==0)            {                let temp = arr[i];                arr[i] = arr[j];                arr[j] = temp;            }        if(arr[j]!=0)            j+=1;    }} // Function to print the array elementsfunction printArray(arr, n){    for (let i = 0; i < n; i++)        document.write(arr[i] + " ");} // Driver Code    let arr = [8, 9, 0, 1, 2, 0, 3];    let n = arr.length;     document.write("Original array: ");    printArray(arr, n);     moveZerosToEnd(arr, n);     document.write("<br>Modified array: ");    printArray(arr, n);  // This code is contributed by Surbhi Tyagi. </script>
Original array: 8 9 0 1 2 0 3 
Modified array: 8 9 1 2 3 0 0
 
Time Complexity: O(N). Auxiliary Space: O(1) 
29AjayKumar
surbhityagi15
Arrays
Competitive Programming
Arrays
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Count pairs with given sum
Chocolate Distribution Problem
Window Sliding Technique
Reversal algorithm for array rotation
Next Greater Element
Competitive Programming - A Complete Guide
Practice for cracking any coding interview
Arrow operator -> in C/C++ with Examples
Prefix Sum Array - Implementation and Applications in Competitive Programming
Fast I/O for Competitive Programming