| 1 | Initialize pointers | (0, 0, 8) | [2, 0, 2, 1, 1, 0, 0, 2, 1] | Start |
| 2 | Check arr[mid]=2 | (0, 0, 8) | [2, 0, 2, 1, 1, 0, 0, 2, 1] | Swap arr[mid] and arr[high], high-- |
| 3 | After swap | (0, 0, 7) | [1, 0, 2, 1, 1, 0, 0, 2, 2] | Swapped arr[0] and arr[8] |
| 4 | Check arr[mid]=1 | (0, 0, 7) | [1, 0, 2, 1, 1, 0, 0, 2, 2] | mid++ |
| 5 | After mid++ | (0, 1, 7) | [1, 0, 2, 1, 1, 0, 0, 2, 2] | Moved mid to 1 |
| 6 | Check arr[mid]=0 | (0, 1, 7) | [1, 0, 2, 1, 1, 0, 0, 2, 2] | Swap arr[low] and arr[mid], low++, mid++ |
| 7 | After swap | (1, 2, 7) | [0, 1, 2, 1, 1, 0, 0, 2, 2] | Swapped arr[0] and arr[1] |
| 8 | Check arr[mid]=2 | (1, 2, 7) | [0, 1, 2, 1, 1, 0, 0, 2, 2] | Swap arr[mid] and arr[high], high-- |
| 9 | After swap | (1, 2, 6) | [0, 1, 2, 1, 1, 0, 0, 2, 2] | Swapped arr[2] and arr[7] |
| 10 | Check arr[mid]=2 | (1, 2, 6) | [0, 1, 2, 1, 1, 0, 0, 2, 2] | Swap arr[mid] and arr[high], high-- |
| 11 | After swap | (1, 2, 5) | [0, 1, 0, 1, 1, 0, 2, 2, 2] | Swapped arr[2] and arr[6] |
| 12 | Check arr[mid]=0 | (1, 2, 5) | [0, 1, 0, 1, 1, 0, 2, 2, 2] | Swap arr[low] and arr[mid], low++, mid++ |
| 13 | After swap | (2, 3, 5) | [0, 0, 1, 1, 1, 0, 2, 2, 2] | Swapped arr[1] and arr[2] |
| 14 | Check arr[mid]=1 | (2, 3, 5) | [0, 0, 1, 1, 1, 0, 2, 2, 2] | mid++ |
| 15 | After mid++ | (2, 4, 5) | [0, 0, 1, 1, 1, 0, 2, 2, 2] | Moved mid to 4 |
| 16 | Check arr[mid]=1 | (2, 4, 5) | [0, 0, 1, 1, 1, 0, 2, 2, 2] | mid++ |
| 17 | After mid++ | (2, 5, 5) | [0, 0, 1, 1, 1, 0, 2, 2, 2] | Moved mid to 5 |
| 18 | Check arr[mid]=0 | (2, 5, 5) | [0, 0, 1, 1, 1, 0, 2, 2, 2] | Swap arr[low] and arr[mid], low++, mid++ |
| 19 | After swap | (3, 6, 5) | [0, 0, 0, 1, 1, 1, 2, 2, 2] | Swapped arr[2] and arr[5] |
| 20 | mid=6 > high=5 | (3, 6, 5) | [0, 0, 0, 1, 1, 1, 2, 2, 2] | Done |