| 1 | Initialize i = low - 1 | -1 | - | 5 | [3, 8, 2, 5, 1, 4] | i = -1 | 3 -> 8 -> 2 -> 5 -> 1 -> 4 |
| 2 | j = 0, arr[j] = 3 <= 5? | -1 | 0 | 5 | [3, 8, 2, 5, 1, 4] | No change | 3 -> 8 -> 2 -> 5 -> 1 -> 4 |
| 3 | arr[j] <= pivot, i++ and swap arr[i], arr[j] | 0 | 0 | 5 | [3, 8, 2, 5, 1, 4] | i=0, swap arr[0], arr[0] | 3 -> 8 -> 2 -> 5 -> 1 -> 4 |
| 4 | j = 1, arr[j] = 8 <= 5? | 0 | 1 | 5 | [3, 8, 2, 5, 1, 4] | No change | 3 -> 8 -> 2 -> 5 -> 1 -> 4 |
| 5 | j = 2, arr[j] = 2 <= 5? | 0 | 2 | 5 | [3, 8, 2, 5, 1, 4] | No change | 3 -> 8 -> 2 -> 5 -> 1 -> 4 |
| 6 | arr[j] <= pivot, i++ and swap arr[i], arr[j] | 1 | 2 | 5 | [3, 2, 8, 5, 1, 4] | i=1, swap arr[1], arr[2] | 3 -> 2 -> 8 -> 5 -> 1 -> 4 |
| 7 | j = 3, arr[j] = 5 <= 5? | 1 | 3 | 5 | [3, 2, 8, 5, 1, 4] | No change | 3 -> 2 -> 8 -> 5 -> 1 -> 4 |
| 8 | arr[j] <= pivot, i++ and swap arr[i], arr[j] | 2 | 3 | 5 | [3, 2, 5, 8, 1, 4] | i=2, swap arr[2], arr[3] | 3 -> 2 -> 5 -> 8 -> 1 -> 4 |
| 9 | j = 4, arr[j] = 1 <= 5? | 2 | 4 | 5 | [3, 2, 5, 8, 1, 4] | No change | 3 -> 2 -> 5 -> 8 -> 1 -> 4 |
| 10 | arr[j] <= pivot, i++ and swap arr[i], arr[j] | 3 | 4 | 5 | [3, 2, 5, 1, 8, 4] | i=3, swap arr[3], arr[4] | 3 -> 2 -> 5 -> 1 -> 8 -> 4 |
| 11 | j = 5, arr[j] = 4 <= 5? | 3 | 5 | 5 | [3, 2, 5, 1, 8, 4] | No change | 3 -> 2 -> 5 -> 1 -> 8 -> 4 |
| 12 | arr[j] <= pivot, i++ and swap arr[i], arr[j] | 4 | 5 | 5 | [3, 2, 5, 1, 4, 8] | i=4, swap arr[4], arr[5] | 3 -> 2 -> 5 -> 1 -> 4 -> 8 |
| 13 | After loop, swap arr[i+1], pivot | 4 | - | 5 | [3, 2, 5, 1, 4, 8] | swap arr[5], arr[5] (pivot stays) | 3 -> 2 -> 5 -> 1 -> 4 -> 8 |
| 14 | Return pivot index i+1 = 5 | 4 | - | 5 | [3, 2, 5, 1, 4, 8] | - | 3 -> 2 -> 5 -> 1 -> 4 -> 8 |
| 15 | Hoare Partition start: i = low = 0, j = high + 1 = 6 | 0 | 6 | 3 | [3, 2, 5, 1, 4, 8] | i=0, j=6 | 3 -> 2 -> 5 -> 1 -> 4 -> 8 |
| 16 | Decrement j while arr[j] > pivot (arr[5]=8>3), j=5->4->3->2 | 0 | 2 | 3 | [3, 2, 5, 1, 4, 8] | j moves to 2 | 3 -> 2 -> 5 -> 1 -> 4 -> 8 |
| 17 | Increment i while arr[i] < pivot (arr[0]=3<3? No), i=0 | 0 | 2 | 3 | [3, 2, 5, 1, 4, 8] | i stays 0 | 3 -> 2 -> 5 -> 1 -> 4 -> 8 |
| 18 | i < j? 0 < 2 yes, swap arr[i], arr[j] | 0 | 2 | 3 | [5, 2, 3, 1, 4, 8] | swap arr[0], arr[2] | 5 -> 2 -> 3 -> 1 -> 4 -> 8 |
| 19 | Decrement j while arr[j] > pivot (arr[2]=3>3? No), j=2 | 0 | 2 | 3 | [5, 2, 3, 1, 4, 8] | j stays 2 | 5 -> 2 -> 3 -> 1 -> 4 -> 8 |
| 20 | Increment i while arr[i] < pivot (arr[1]=2<3 yes), i=1->2 | 2 | 2 | 3 | [5, 2, 3, 1, 4, 8] | i moves to 2 | 5 -> 2 -> 3 -> 1 -> 4 -> 8 |
| 21 | i >= j? 2 >= 2 yes, return j=2 | 2 | 2 | 3 | [5, 2, 3, 1, 4, 8] | partition index = 2 | 5 -> 2 -> 3 -> 1 -> 4 -> 8 |