#include <iostream>
void swap(int* a, int* b) {
int tmp = *a;
*a = *b;
*b = tmp;
}
void sort012Array(int arr[], int size) {
int lo = 0, curr = 0;
int hi = size - 1;
while (curr <= hi) {
switch (arr[curr]) {
case 0:
swap(&arr[lo++], &arr[curr++]);
break;
case 1:
curr++;
break;
case 2:
swap(&arr[curr], &arr[hi--]);
break;
}
}
}
int main()
{
int arr[] = { 1, 2, 2, 0, 1, 1, 0, 2, 0, 1, 0, 0, 1 };
int size = sizeof(arr) / sizeof(arr[0]);
sort012Array(arr, size);
for (int i = 0; i < size; i++)
std::cout << arr[i] << " ";
}
/*
run:
0 0 0 0 0 1 1 1 1 1 2 2 2
*/