Move all zeroes to end of array using Two-Pointers

Last Updated : 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:

1. Iterate the array from 0 to N

2. Keep two pointers, one for zero elements and other for non-zero elements.

3. Swap every zero elements with the non-zero element that comes just after it.

C

 `// C implementation to move all zeroes at ` `// the end of array ` `#include`   `// Function to move all zeroes at ` `// the end of array ` `void` `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

C++

 `// C++ implementation to move all zeroes at ` `// the end of array ` `#include ` `using` `namespace` `std; `   `// Function to move all zeroes at ` `// the end of array ` `void` `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

Java

 `// 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

 `# Python3 implementation to move all zeroes at ` `# the end of array `   `# Function to move all zeroes at ` `# the end of array ` `def` `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 elements ` `def` `printArray(arr, n): `   `    ``for` `i ``in` `range``(``0``, n): ` `        ``print``(arr[i],end``=``" "``) `     `# Driver program to test above ` `arr ``=` `[``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#

 `// C# implementation to move all zeroes ` `// at the end of array ` `using` `System;`   `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++)` `       ``Console.Write(arr[i] + ``" "``);` `}`   `// Driver Code` `public` `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`

Javascript

 ``

Output:

```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)

Previous
Next