Sort Array
Posted: 1 Jan, 2021
Difficulty: Moderate
You are given an array consisting of 'N' positive integers where each integer is either 0 or 1 or 2. Your task is to sort the given array in non-decreasing order.
Note :
1. The array consists of only 3 distinct integers 0, 1, 2.
2. The array is non-empty.
Input Format :
The first line of the input contains an integer T denoting the number of test cases.
The first line of each test case contains an integer N, denoting the size of the array.
The second line of each test case contains N space-separated integers, representing the elements of the array.
Output Format :
The only line of output of each test case consists of N integers, denoting the sorted order of elements in the given array.
Print the output of each test case in a separate line.
Note :
You do not need to print anything, it has already been taken care of. Just implement the given function.
Constraints :
1 <= T <= 100
1 <= N <= 10^4
0 <= arr[i] <= 2
where arr[i] is the array element at index 'i'.
Time Limit: 1 sec
Approach 1
Approach 2
Algorithm
- Since sorting using the in-built library is trivial and we are also given that there are only three distinct integers in the array, we can use three-pointers to solve this problem. We are going to use a technique which is an application of the famous Dutch national flag theorem.
- Let low = 0 and high = n - 1 initially.
- For i = 0 to i <= high do the following:
- If arr[i] = 0, then we know that this element should be on the lower end of the array so we can swap arr[i] with arr[low] and increment low i.e low += 1.
- Else if arr[i] = 2, then we know that this element should be on the last of the array, so we swap arr[i] and arr[high] and do i += 1 and high -= 1.