- Published on

# Sort an array of 0s, 1s and 2s.

Yay! It's the second day of my coding diary.

**Problem of the day** - Sort an array of 0s, 1s and 2s

**Tag** - Easy

So, the problem is, an array containing numbers 0,1, or 2 is given and I need to sort the array.

The catch here is, I can't use any in-build sorting algorithm here. I need to keep the time complexity `o(n)`

.

Initially, the problem seemed pretty complex but after some drilling, a simple approach came into my mind. As I only have 0,1 or 2 so why not store their counts and then just push values as per the count to new array.

Suppose, 0 came twice, 1 came thrice & 2 came once. So, I will just push values as per count. My final output would look like this - `[0,0,1,1,1,2]`

**Code**

```
#include <iostream>#include<vector>using namespace std;
int main(){ vector<int> list = {0,1,2,2,1,1};
vector<int> count = {0,0,0};
for(auto val: list) { count[val]++; } vector<int> res;
int curr_index = 0; int output_index = 0;
while(curr_index < count.size()) { if(count[curr_index] == 0) { curr_index++; } else { res.push_back(curr_index); count[curr_index] -= 1; } } for(auto val: list) { cout << val << " "; } return 0;}
```

**Time complexity** - o(n)

**Space Complexity** - o(n)

Umm, It seems I am unnecessary keeping an extra array. Can I do it without using extra space (variables are not counted as extra space) ?

As I have calculated the count, I don't care what were the values in the original array so I can just update the same array, in place.

My modified code looks like this -

```
#include <iostream>#include<vector>using namespace std;
int main(){ vector<int> list = {0,1,2,2,1,1};
vector<int> count = {0,0,0};
for(auto val: list) { count[val]++; }
int curr_index = 0; int output_index = 0;
while(curr_index < count.size()) { if(count[curr_index] == 0) { curr_index++; } else { list[output_index] = curr_index; output_index++; count[curr_index] -= 1; } } for(auto val: list) { cout << val << " "; } return 0;}
```

**Time complexity** - o(n)

**Space Complexity** - o(1)

You might like previous editions of my coding diary -