Merge Sort Advantages
•
Asymptotically Optimal
•
Stable
•
Good for external sorting
Merge Sort Disadvantages
•
Harder to program
•
Not in-place
Merge Sort Code
Merge Sort Example
2 8 5 1 3 4 6
2 8 5 1 3 4 6
2 8 5 1
2 8 5 1 3 4
6 3 4
2 8 5 1 3 4 6
2 8 5 1 3 4 6
2 8 5 1
2 8 5 1 3 4
6 3 4
2 8 5 1 3 4 6
2 8 5 1 3 4 6
2 8 5 1
2 8 5 1 3 4
6 3 4
position 1 = 0 value = 2
position 2 = 1 value = 8
0 0
Temporary Array Original Array
position 3 = 0 value = 0
2 8 5 1 3 4 6
min position = 0
position 1 = 0 value = 2
• set value at position 3 to min(2, 8) • increment position 1
• increment position 3
position 2 = 1 value = 8
0 0
Temporary Array Original Array
position 3 = 0 value = 0
2 8 5 1 3 4 6
min position = 0
position 1 = 0 value = 2
• set value at position 3 to min(2, 8)
• increment position 1
• increment position 3 min position = 0
middle position = 0 max position = 1
position 2 = 1 value = 8
2 0
Temporary Array Original Array
position 3 = 0 value = 2
position 1 = 1 value = 8
• set value at position 3 to min(2, 8)
• increment position 1
• increment position 3
position 2 = 1 value = 8
2 0
Temporary Array Original Array
2 8 5 1 3 4 6
min position = 0
middle position = 0 max position = 1 position 3 = 0
position 1 = 1 value = 2
• set value at position 3 to min(2, 8) • increment position 1
• increment position 3
position 2 = 1 value = 8
2 0
Temporary Array Original Array
2 8 5 1 3 4 6
min position = 0
middle position = 0 max position = 1 position 3 = 1
position 1 = 1 value = 2
position 2 = 1 value = 8
2 0
Temporary Array Original Array
2 8 5 1 3 4 6
min position = 0
middle position = 0 max position = 1 position 3 = 1
position 1 = 1 value = 2
• position 1 > middle position
• copy from original to temporary
from position 2 to max position
• increment position 3 to the (end + 1)
position 2 = 1 value = 8
2 0
Temporary Array Original Array
2 8 5 1 3 4 6
min position = 0
middle position = 0 max position = 1 position 3 = 1
position 1 = 1 value = 2
• position 1 > middle position
• copy from original to temporary
from position 2 to max position
• increment position 3 to the (end + 1)
position 2 = 1 value = 8
2 0
Temporary Array Original Array
2 8 5 1 3 4 6
min position = 0
middle position = 0 max position = 1 position 3 = 1
position 1 = 1 value = 2
• position 1 > middle position
• copy from original to temporary
from position 2 to max position
• increment position 3 to the (end + 1)
position 2 = 1 value = 8
2 8
Temporary Array Original Array
2 8 5 1 3 4 6
min position = 0
middle position = 0 max position = 1 position 3 = 1
position 1 = 1 value = 2
• position 1 > middle position
• copy from original to temporary
from position 2 to max position
• increment position 3 to the (end + 1)
position 2 = 1 value = 8
2 8
Temporary Array Original Array
2 8 5 1 3 4 6
min position = 0
middle position = 0 max position = 1 position 3 = 2
position 1 = 1 value = 2
position 2 = 1 value = 8
2 8
Temporary Array Original Array
2 8 5 1 3 4 6
min position = 0
middle position = 0 max position = 1 position 3 = 2
position 1 = 1 value = 2
• position 3 = length of temporary array • copy everything from the temporary
array to the original array from min position to max position
position 2 = 1 value = 8
2 8
Temporary Array Original Array
2 8 5 1 3 4 6
min position = 0
middle position = 0 max position = 1 position 3 = 2
position 1 = 1 value = 2
• position 3 = length of temporary array
• copy everything from the temporary
array to the original array from min position to max position
position 2 = 1 value = 8
2 8
Temporary Array Original Array
2 8 5 1 3 4 6
min position = 0
middle position = 0 max position = 1 position 3 = 2
position 1 = 1 value = 2
• position 3 = length of temporary array
• copy everything from the temporary
array to the original array from min position to max position
position 2 = 1 value = 8
2 8
Temporary Array Original Array
2 8 5 1 3 4 6
min position = 0
middle position = 0 max position = 1 position 3 = 2
2 8 5 1 3 4 6
2 8 5 1 3 4 6
2 8 5 1
2 8 5 1 3 4
6 3 4
2 8 5 1 3 4 6
2 8 5 1 3 4 6
2 8 5 1
2 8 5 1 3 4
6 3 4
position 1 = 2 value = 5
position 2 = 3 value = 1
0 0
Temporary Array Original Array
position 3 = 0 value = 0
2 8 5 1 3 4 6
min position = 2
position 1 = 2 value = 5
position 2 = 3 value = 1
0 0
Temporary Array Original Array
position 3 = 0 value = 0
2 8 5 1 3 4 6
min position = 2
middle position = 2 max position = 3
• set value at position 3 to min(5, 1) • increment position 2
position 1 = 2 value = 5
position 2 = 3 value = 1
1 0
Temporary Array Original Array
position 3 = 0 value = 1
2 8 5 1 3 4 6
min position = 2
middle position = 2 max position = 3
• set value at position 3 to min(5, 1)
position 1 = 2 value = 5
position 2 = 4 value = 3
1 0
Temporary Array Original Array
position 3 = 0 value = 1
2 8 5 1 3 4 6
min position = 2
middle position = 2 max position = 3
• set value at position 3 to min(5, 1)
• increment position 2
position 1 = 2 value = 5
position 2 = 4 value = 3
1 0
Temporary Array Original Array
position 3 = 1 value = 0
2 8 5 1 3 4 6
min position = 2
middle position = 2 max position = 3
• set value at position 3 to min(5, 1) • increment position 2
position 1 = 2 value = 5
position 2 = 4 value = 3
1 0
Temporary Array Original Array
position 3 = 1 value = 0
2 8 5 1 3 4 6
min position = 2
position 1 = 2 value = 5
position 2 = 4 value = 3
1 0
Temporary Array Original Array
position 3 = 1 value = 0
2 8 5 1 3 4 6
min position = 2
middle position = 2 max position = 3
• position 2 > max position
• copy from original to temporary
from position 1 to middle position
position 1 = 2 value = 5
position 2 = 4 value = 3
1 0
Temporary Array Original Array
position 3 = 1 value = 0
2 8 5 1 3 4 6
min position = 2
middle position = 2 max position = 3
• position 2 > max position
• copy from original to temporary
from position 1 to middle position
position 1 = 2 value = 5
position 2 = 4 value = 3
1 5
Temporary Array Original Array
position 3 = 1 value = 5
2 8 5 1 3 4 6
min position = 2
middle position = 2 max position = 3
• position 2 > max position
• copy from original to temporary
from position 1 to middle position
position 1 = 2 value = 5
position 2 = 4 value = 3
1 5
Temporary Array Original Array
position 3 = 2 value = N/A
2 8 5 1 3 4 6
min position = 2
middle position = 2 max position = 3
• position 2 > max position
• copy from original to temporary
from position 1 to middle position
position 1 = 2 value = 5
position 2 = 4 value = 3
1 5
Temporary Array Original Array
position 3 = 2 value = N/A
2 8 5 1 3 4 6
min position = 2
position 1 = 2 value = 5
position 2 = 4 value = 3
1 5
Temporary Array Original Array
position 3 = 2 value = N/A
2 8 5 1 3 4 6
min position = 2
middle position = 2 max position = 3
• position 3 = length of temporary array • copy everything from the temporary
position 1 = 2 value = 5
position 2 = 4 value = 3
1 5
Temporary Array Original Array
position 3 = 2 value = N/A
2 8 5 1 3 4 6
min position = 2
middle position = 2 max position = 3
• position 3 = length of temporary array
• copy everything from the temporary
position 1 = 2 value = 5
position 2 = 4 value = 3
1 5
Temporary Array Original Array
position 3 = 2 value = N/A
2 8 1 5 3 4 6
min position = 2
middle position = 2 max position = 3
• position 3 = length of temporary array • copy everything from the temporary
2 8 5 1 3 4 6
2 8 5 1 3 4 6
2 8 1 5
2 8 5 1 3 4
6 3 4
2 8 5 1 3 4 6
2 8 5 1 3 4 6
2 8 1 5
2 8 5 1 3 4
6 3 4
position 1 = 0 value = 2
position 2 = 2 value = 1
Temporary Array Original Array
position 3 = 0 value = 0
2 8 1 5 3 4 6
min position = 0
middle position = 1 max position = 3
position 1 = 0 value = 2
position 2 = 2 value = 1
Temporary Array Original Array
position 3 = 0 value = 0
2 8 1 5 3 4 6
min position = 0
middle position = 1 max position = 3
0 0 0 0
• set value at position 3 to min(2, 1) • increment position 2
position 1 = 0 value = 2
position 2 = 2 value = 1
Temporary Array Original Array
position 3 = 0 value = 1
2 8 1 5 3 4 6
min position = 0
middle position = 1 max position = 3
1 0 0 0
• set value at position 3 to min(2, 1)
position 1 = 0 value = 2
position 2 = 3 value = 5
Temporary Array Original Array
position 3 = 0 value = 1
2 8 1 5 3 4 6
min position = 0
middle position = 1 max position = 3
1 0 0 0
• set value at position 3 to min(2, 1)
• increment position 2
position 1 = 0 value = 2
position 2 = 3 value = 5
Temporary Array Original Array
position 3 = 1 value = 0
2 8 1 5 3 4 6
min position = 0
middle position = 1 max position = 3
1 0 0 0
• set value at position 3 to min(2, 1) • increment position 2
position 1 = 0 value = 2
position 2 = 3 value = 5
Temporary Array Original Array
position 3 = 1 value = 0
2 8 1 5 3 4 6
min position = 0
middle position = 1 max position = 3
position 1 = 0 value = 2
position 2 = 3 value = 5
Temporary Array Original Array
position 3 = 1 value = 0
2 8 1 5 3 4 6
min position = 0
middle position = 1 max position = 3
1 0 0 0
• set value at position 3 to min(2, 5) • increment position 1
position 1 = 0 value = 2
position 2 = 3 value = 5
Temporary Array Original Array
position 3 = 1 value = 2
2 8 1 5 3 4 6
min position = 0
middle position = 1 max position = 3
1 2 0 0
• set value at position 3 to min(2, 5)
position 1 = 1 value = 8
position 2 = 3 value = 5
Temporary Array Original Array
position 3 = 1 value = 2
2 8 1 5 3 4 6
min position = 0
middle position = 1 max position = 3
1 2 0 0
• set value at position 3 to min(2, 5)
• increment position 1
position 1 = 1 value = 8
position 2 = 3 value = 5
Temporary Array Original Array
position 3 = 2 value = 0
2 8 1 5 3 4 6
min position = 0
middle position = 1 max position = 3
1 2 0 0
• set value at position 3 to min(2, 5) • increment position 1
position 1 = 1 value = 8
position 2 = 3 value = 5
Temporary Array Original Array
position 3 = 2 value = 0
2 8 1 5 3 4 6
min position = 0
middle position = 1 max position = 3
position 1 = 1 value = 8
position 2 = 3 value = 5
Temporary Array Original Array
position 3 = 2 value = 0
2 8 1 5 3 4 6
min position = 0
middle position = 1 max position = 3
1 2 0 0
• set value at position 3 to min(8, 5) • increment position 2
position 1 = 1 value = 8
position 2 = 3 value = 5
Temporary Array Original Array
position 3 = 2 value = 5
2 8 1 5 3 4 6
min position = 0
middle position = 1 max position = 3
1 2 5 0
• set value at position 3 to min(8, 5)
position 1 = 1 value = 8
position 2 = 4 value = 3
Temporary Array Original Array
position 3 = 2 value = 5
2 8 1 5 3 4 6
min position = 0
middle position = 1 max position = 3
1 2 5 0
• set value at position 3 to min(8, 5)
• increment position 2
position 1 = 1 value = 8
position 2 = 4 value = 3
Temporary Array Original Array
position 3 = 3 value = 0
2 8 1 5 3 4 6
min position = 0
middle position = 1 max position = 3
1 2 5 0
• set value at position 3 to min(8, 5) • increment position 2
position 1 = 1 value = 8
position 2 = 4 value = 3
Temporary Array Original Array
position 3 = 3 value = 0
2 8 1 5 3 4 6
min position = 0
middle position = 1 max position = 3
position 1 = 1 value = 8
position 2 = 4 value = 3
Temporary Array Original Array
position 3 = 3 value = 0
2 8 1 5 3 4 6
min position = 0
middle position = 1 max position = 3
1 2 5 0
• position 2 > max position
• copy from original to temporary
from position 1 to middle position
position 1 = 1 value = 8
position 2 = 4 value = 3
Temporary Array Original Array
position 3 = 3 value = 0
2 8 1 5 3 4 6
min position = 0
middle position = 1 max position = 3
1 2 5 0
• position 2 > max position
• copy from original to temporary
from position 1 to middle position
position 1 = 1 value = 8
position 2 = 4 value = 3
Temporary Array Original Array
position 3 = 3 value = 8
2 8 1 5 3 4 6
min position = 0
middle position = 1 max position = 3
1 2 5 8
• position 2 > max position
• copy from original to temporary
from position 1 to middle position
position 1 = 1 value = 8
position 2 = 4 value = 3
Temporary Array Original Array
position 3 = 4 value = N/A
2 8 1 5 3 4 6
min position = 0
middle position = 1 max position = 3
1 2 5 8
• position 2 > max position
• copy from original to temporary
from position 1 to middle position
position 1 = 1 value = 8
position 2 = 4 value = 3
Temporary Array Original Array
position 3 = 4 value = N/A
2 8 1 5 3 4 6
min position = 0
middle position = 1 max position = 3
position 1 = 1 value = 8
position 2 = 4 value = 3
Temporary Array Original Array
position 3 = 4 value = N/A
2 8 1 5 3 4 6
min position = 0
middle position = 1 max position = 3
1 2 5 8
• position 3 = length of temporary array • copy everything from the temporary
position 1 = 1 value = 8
position 2 = 4 value = 3
Temporary Array Original Array
position 3 = 4 value = N/A
2 8 1 5 3 4 6
min position = 0
middle position = 1 max position = 3
1 2 5 8
• position 3 = length of temporary array
• copy everything from the temporary
position 1 = 1 value = 8
position 2 = 4 value = 3
Temporary Array Original Array
position 3 = 4 value = N/A
1 2 5 8 3 4 6
min position = 0
middle position = 1 max position = 3
1 2 5 8
• position 3 = length of temporary array
• copy everything from the temporary
2 8 5 1 3 4 6
1 2 5 8 3 4 6
2 8 1 5
2 8 5 1 3 4
6 3 4
2 8 5 1 3 4 6
1 2 5 8 3 4 6
2 8 1 5
2 8 5 1 3 4
6 3 4
position 1 = 4 value = 3
position 2 = 5 value = 4
0 0
Temporary Array Original Array
position 3 = 0 value = 0
1 2 5 8 3 4 6
min position = 4
position 1 = 4 value = 3
position 2 = 5 value = 4
0 0
Temporary Array Original Array
position 3 = 0 value = 0
1 2 5 8 3 4 6
min position = 4
middle position = 4 max position = 5
• set value at position 3 to min(3, 4) • increment position 1
position 1 = 4 value = 3
position 2 = 5 value = 4
3 0
Temporary Array Original Array
position 3 = 0 value = 3
1 2 5 8 3 4 6
min position = 4
middle position = 4 max position = 5
• set value at position 3 to min(3, 4)
position 1 = 5 value = 4
position 2 = 5 value = 4
3 0
Temporary Array Original Array
position 3 = 0 value = 3
1 2 5 8 3 4 6
min position = 4
middle position = 4 max position = 5
• set value at position 3 to min(3, 4)
• increment position 1
position 1 = 5 value = 4
position 2 = 5 value = 4
3 0
Temporary Array Original Array
position 3 = 1 value = 0
1 2 5 8 3 4 6
min position = 4
middle position = 4 max position = 5
• set value at position 3 to min(3, 4) • increment position 1
position 1 = 5 value = 4
position 2 = 5 value = 4
3 0
Temporary Array Original Array
position 3 = 1 value = 0
1 2 5 8 3 4 6
min position = 4
position 1 = 5 value = 4
position 2 = 5 value = 4
3 0
Temporary Array Original Array
position 3 = 1 value = 0
1 2 5 8 3 4 6
min position = 4
middle position = 4 max position = 5
• position 1 > middle position
• copy from original to temporary
from position 2 to max position
position 1 = 5 value = 4
position 2 = 5 value = 4
3 0
Temporary Array Original Array
position 3 = 1 value = 0
1 2 5 8 3 4 6
min position = 4
middle position = 4 max position = 5
• position 1 > middle position
• copy from original to temporary
from position 2 to max position
position 1 = 5 value = 4
position 2 = 5 value = 4
3 4
Temporary Array Original Array
position 3 = 1 value = 4
1 2 5 8 3 4 6
min position = 4
middle position = 4 max position = 5
• position 1 > middle position
• copy from original to temporary
from position 2 to max position
position 1 = 5 value = 4
position 2 = 5 value = 4
3 4
Temporary Array Original Array
position 3 = 2 value = N/A
1 2 5 8 3 4 6
min position = 4
middle position = 4 max position = 5
• position 1 > middle position
• copy from original to temporary
from position 2 to max position
position 1 = 5 value = 4
position 2 = 5 value = 4
3 4
Temporary Array Original Array
position 3 = 2 value = N/A
1 2 5 8 3 4 6
min position = 4
position 1 = 5 value = 4
position 2 = 5 value = 4
3 4
Temporary Array Original Array
position 3 = 2 value = N/A
1 2 5 8 3 4 6
min position = 4
middle position = 4 max position = 5
• position 3 = length of temporary array • copy everything from the temporary
position 1 = 5 value = 4
position 2 = 5 value = 4
3 4
Temporary Array Original Array
position 3 = 2 value = N/A
1 2 5 8 3 4 6
min position = 4
middle position = 4 max position = 5
• position 3 = length of temporary array
• copy everything from the temporary
position 1 = 5 value = 4
position 2 = 5 value = 4
3 4
Temporary Array Original Array
position 3 = 2 value = N/A
1 2 5 8 3 4 6
min position = 4
middle position = 4 max position = 5
• position 3 = length of temporary array • copy everything from the temporary
2 8 5 1 3 4 6
1 2 5 8 3 4 6
2 8 1 5
2 8 5 1 3 4
6 3 4
2 8 5 1 3 4 6
1 2 5 8 3 4 6
2 8 1 5
2 8 5 1 3 4
6 3 4
position 1 = 4 value = 3
position 2 = 5 value = 6
Temporary Array Original Array
position 3 = 0 value = 0
1 2 5 8 3 4 6
min position = 4
middle position = 5 max position = 6
position 1 = 4 value = 3
position 2 = 5 value = 6
Temporary Array Original Array
position 3 = 0 value = 0
1 2 5 8 3 4 6
min position = 4
middle position = 5 max position = 6
0 0 0
• set value at position 3 to min(3, 6) • increment position 1
position 1 = 4 value = 3
position 2 = 5 value = 6
Temporary Array Original Array
position 3 = 0 value = 3
1 2 5 8 3 4 6
min position = 4
middle position = 5 max position = 6
3 0 0
• set value at position 3 to min(3, 6)
position 1 = 5 value = 4
position 2 = 5 value = 6
Temporary Array Original Array
position 3 = 0 value = 3
1 2 5 8 3 4 6
min position = 4
middle position = 5 max position = 6
3 0 0
• set value at position 3 to min(3, 6)
• increment position 1
position 1 = 5 value = 4
position 2 = 5 value = 6
Temporary Array Original Array
position 3 = 1 value = 0
1 2 5 8 3 4 6
min position = 4
middle position = 5 max position = 6
3 0 0
• set value at position 3 to min(3, 6) • increment position 1
position 1 = 5 value = 4
position 2 = 5 value = 6
Temporary Array Original Array
position 3 = 1 value = 0
1 2 5 8 3 4 6
min position = 4
middle position = 5 max position = 6
position 1 = 5 value = 4
position 2 = 5 value = 6
Temporary Array Original Array
position 3 = 1 value = 0
1 2 5 8 3 4 6
min position = 4
middle position = 5 max position = 6
3 0 0
• set value at position 3 to min(4, 6) • increment position 1
position 1 = 5 value = 4
position 2 = 5 value = 6
Temporary Array Original Array
position 3 = 1 value = 4
1 2 5 8 3 4 6
min position = 4
middle position = 5 max position = 6
3 4 0
• set value at position 3 to min(4, 6)
position 1 = 6 value = 6
position 2 = 5 value = 6
Temporary Array Original Array
position 3 = 1 value = 4
1 2 5 8 3 4 6
min position = 4
middle position = 5 max position = 6
3 4 0
• set value at position 3 to min(4, 6)
• increment position 1
position 1 = 6 value = 6
position 2 = 5 value = 6
Temporary Array Original Array
position 3 = 2 value = 0
1 2 5 8 3 4 6
min position = 4
middle position = 5 max position = 6
3 4 0
• set value at position 3 to min(4, 6) • increment position 1
position 1 = 6 value = 6
position 2 = 5 value = 6
Temporary Array Original Array
position 3 = 2 value = 0
1 2 5 8 3 4 6
min position = 4
middle position = 5 max position = 6
position 1 = 6 value = 6
position 2 = 5 value = 6
Temporary Array Original Array
position 3 = 2 value = 0
1 2 5 8 3 4 6
min position = 4
middle position = 5 max position = 6
3 4 0
• position 1 > middle position
• copy from original to temporary
from position 2 to max position
position 1 = 6 value = 6
position 2 = 5 value = 6
Temporary Array Original Array
position 3 = 2 value = 0
1 2 5 8 3 4 6
min position = 4
middle position = 5 max position = 6
3 4 0
• position 1 > middle position
• copy from original to temporary
from position 2 to max position
position 1 = 6 value = 6
position 2 = 5 value = 6
Temporary Array Original Array
position 3 = 2 value = 6
1 2 5 8 3 4 6
min position = 4
middle position = 5 max position = 6
3 4 6
• position 1 > middle position
• copy from original to temporary
from position 2 to max position
position 1 = 6 value = 6
position 2 = 5 value = 6
Temporary Array Original Array
position 3 = 3 value = N/A
1 2 5 8 3 4 6
min position = 4
middle position = 5 max position = 6
3 4 6
• position 1 > middle position
• copy from original to temporary
from position 2 to max position
position 1 = 6 value = 6
position 2 = 5 value = 6
Temporary Array Original Array
position 3 = 3 value = N/A
1 2 5 8 3 4 6
min position = 4
middle position = 5 max position = 6
position 1 = 6 value = 6
position 2 = 5 value = 6
Temporary Array Original Array
position 3 = 3 value = N/A
1 2 5 8 3 4 6
min position = 4
middle position = 5 max position = 6
3 4 6
• position 3 = length of temporary array • copy everything from the temporary
position 1 = 6 value = 6
position 2 = 5 value = 6
Temporary Array Original Array
position 3 = 3 value = N/A
1 2 5 8 3 4 6
min position = 4
middle position = 5 max position = 6
3 4 6
• position 3 = length of temporary array
• copy everything from the temporary
position 1 = 6 value = 6
position 2 = 5 value = 6
Temporary Array Original Array
position 3 = 3 value = N/A
1 2 5 8 3 4 6
min position = 4
middle position = 5 max position = 6
3 4 6
• position 3 = length of temporary array
• copy everything from the temporary
2 8 5 1 3 4 6
1 2 5 8 3 4 6
2 8 1 5
2 8 5 1 3 4
6 3 4
2 8 5 1 3 4 6
1 2 5 8 3 4 6
2 8 1 5
2 8 5 1 3 4
6 3 4
position 1 = 0 value = 1
position 2 = 4 value = 3
Temporary Array Original Array
position 3 = 0 value = 0
1 2 5 8 3 4 6
min position = 0
middle position = 3 max position = 6
position 1 = 0 value = 1
position 2 = 4 value = 3
Temporary Array Original Array
position 3 = 0 value = 0
1 2 5 8 3 4 6
min position = 0
middle position = 3 max position = 6
0 0 0 0 0 0 0
• set value at position 3 to min(1, 3) • increment position 1
position 1 = 0 value = 1
position 2 = 4 value = 3
Temporary Array Original Array
position 3 = 0 value = 1
1 2 5 8 3 4 6
min position = 0
middle position = 3 max position = 6
1 0 0 0 0 0 0
• set value at position 3 to min(1, 3)
position 1 = 1 value = 2
position 2 = 4 value = 3
Temporary Array Original Array
position 3 = 0 value = 1
1 2 5 8 3 4 6
min position = 0
middle position = 3 max position = 6
1 0 0 0 0 0 0
• set value at position 3 to min(1, 3)
• increment position 1
position 1 = 1 value = 2
position 2 = 4 value = 3
Temporary Array Original Array
position 3 = 1 value = 0
1 2 5 8 3 4 6
min position = 0
middle position = 3 max position = 6
1 0 0 0 0 0 0
• set value at position 3 to min(1, 3) • increment position 1
position 1 = 1 value = 2
position 2 = 4 value = 3
Temporary Array Original Array
position 3 = 1 value = 0
1 2 5 8 3 4 6
min position = 0
middle position = 3 max position = 6
position 1 = 1 value = 2
position 2 = 4 value = 3
Temporary Array Original Array
position 3 = 1 value = 0
1 2 5 8 3 4 6
min position = 0
middle position = 3 max position = 6
1 0 0 0 0 0 0
• set value at position 3 to min(2, 3) • increment position 1
position 1 = 1 value = 2
position 2 = 4 value = 3
Temporary Array Original Array
position 3 = 1 value = 2
1 2 5 8 3 4 6
min position = 0
middle position = 3 max position = 6
1 2 0 0 0 0 0
• set value at position 3 to min(2, 3)
position 1 = 2 value = 5
position 2 = 4 value = 3
Temporary Array Original Array
position 3 = 1 value = 2
1 2 5 8 3 4 6
min position = 0
middle position = 3 max position = 6
1 2 0 0 0 0 0
• set value at position 3 to min(2, 3)
• increment position 1
position 1 = 2 value = 5
position 2 = 4 value = 3
Temporary Array Original Array
position 3 = 2 value = 0
1 2 5 8 3 4 6
min position = 0
middle position = 3 max position = 6
1 2 0 0 0 0 0
• set value at position 3 to min(2, 3) • increment position 1
position 1 = 2 value = 5
position 2 = 4 value = 3
Temporary Array Original Array
position 3 = 2 value = 0
1 2 5 8 3 4 6
min position = 0
middle position = 3 max position = 6
position 1 = 2 value = 5
position 2 = 4 value = 3
Temporary Array Original Array
position 3 = 2 value = 0
1 2 5 8 3 4 6
min position = 0
middle position = 3 max position = 6
1 2 0 0 0 0 0
• set value at position 3 to min(5, 3) • increment position 2
position 1 = 2 value = 5
position 2 = 4 value = 3
Temporary Array Original Array
position 3 = 2 value = 3
1 2 5 8 3 4 6
min position = 0
middle position = 3 max position = 6
1 2 3 0 0 0 0
• set value at position 3 to min(5, 3)
position 1 = 2 value = 5
position 2 = 5 value = 4
Temporary Array Original Array
position 3 = 2 value = 3
1 2 5 8 3 4 6
min position = 0
middle position = 3 max position = 6
1 2 3 0 0 0 0
• set value at position 3 to min(5, 3)
• increment position 2
position 1 = 2 value = 5
position 2 = 5 value = 4
Temporary Array Original Array
position 3 = 3 value = 0
1 2 5 8 3 4 6
min position = 0
middle position = 3 max position = 6
1 2 3 0 0 0 0
• set value at position 3 to min(5, 3) • increment position 2
position 1 = 2 value = 5
position 2 = 5 value = 4
Temporary Array Original Array
position 3 = 3 value = 0
1 2 5 8 3 4 6
min position = 0
middle position = 3 max position = 6
position 1 = 2 value = 5
position 2 = 5 value = 4
Temporary Array Original Array
position 3 = 3 value = 0
1 2 5 8 3 4 6
min position = 0
middle position = 3 max position = 6
1 2 3 0 0 0 0
• set value at position 3 to min(5, 4) • increment position 2
position 1 = 2 value = 5
position 2 = 5 value = 4
Temporary Array Original Array
position 3 = 3 value = 4
1 2 5 8 3 4 6
min position = 0
middle position = 3 max position = 6
1 2 3 4 0 0 0
• set value at position 3 to min(5, 4)
position 1 = 2 value = 5
position 2 = 6 value = 6
Temporary Array Original Array
position 3 = 3 value = 4
1 2 5 8 3 4 6
min position = 0
middle position = 3 max position = 6
1 2 3 4 0 0 0
• set value at position 3 to min(5, 4)
• increment position 2
position 1 = 2 value = 5
position 2 = 6 value = 6
Temporary Array Original Array
position 3 = 4 value = 0
1 2 5 8 3 4 6
min position = 0
middle position = 3 max position = 6
1 2 3 4 0 0 0
• set value at position 3 to min(5, 4) • increment position 2
position 1 = 2 value = 5
position 2 = 6 value = 6
Temporary Array Original Array
position 3 = 4 value = 0
1 2 5 8 3 4 6
min position = 0
middle position = 3 max position = 6
position 1 = 2 value = 5
position 2 = 6 value = 6
Temporary Array Original Array
position 3 = 4 value = 0
1 2 5 8 3 4 6
min position = 0
middle position = 3 max position = 6
1 2 3 4 0 0 0
• set value at position 3 to min(5, 6) • increment position 1
position 1 = 2 value = 5
position 2 = 6 value = 6
Temporary Array Original Array
position 3 = 4 value = 5
1 2 5 8 3 4 6
min position = 0
middle position = 3 max position = 6
1 2 3 4 5 0 0
• set value at position 3 to min(5, 6)
position 1 = 3 value = 8
position 2 = 6 value = 6
Temporary Array Original Array
position 3 = 4 value = 5
1 2 5 8 3 4 6
min position = 0
middle position = 3 max position = 6
1 2 3 4 5 0 0
• set value at position 3 to min(5, 6)
• increment position 1
position 1 = 3 value = 8
position 2 = 6 value = 6
Temporary Array Original Array
position 3 = 5 value = 0
1 2 5 8 3 4 6
min position = 0
middle position = 3 max position = 6
1 2 3 4 5 0 0
• set value at position 3 to min(5, 6) • increment position 1
position 1 = 3 value = 8
position 2 = 6 value = 6
Temporary Array Original Array
position 3 = 5 value = 0
1 2 5 8 3 4 6
min position = 0
middle position = 3 max position = 6
position 1 = 3 value = 8
position 2 = 6 value = 6
Temporary Array Original Array
position 3 = 5 value = 0
1 2 5 8 3 4 6
min position = 0
middle position = 3 max position = 6
1 2 3 4 5 0 0
• set value at position 3 to min(8, 6) • increment position 2
position 1 = 3 value = 8
position 2 = 6 value = 6
Temporary Array Original Array
position 3 = 5 value = 6
1 2 5 8 3 4 6
min position = 0
middle position = 3 max position = 6
1 2 3 4 5 6 0
• set value at position 3 to min(8, 6)
position 1 = 3 value = 8
position 2 = 7 value = N/A Temporary Array Original Array
position 3 = 5 value = 6
1 2 5 8 3 4 6
min position = 0
middle position = 3 max position = 6
1 2 3 4 5 6 0
• set value at position 3 to min(8, 6)
• increment position 2
position 1 = 3 value = 8
position 2 = 7 value = N/A Temporary Array Original Array
position 3 = 6 value = 0
1 2 5 8 3 4 6
min position = 0
middle position = 3 max position = 6
1 2 3 4 5 6 0
• set value at position 3 to min(8, 6) • increment position 2
position 1 = 3 value = 8
position 2 = 7 value = N/A Temporary Array Original Array
position 3 = 6 value = 0
1 2 5 8 3 4 6
min position = 0
middle position = 3 max position = 6
position 1 = 3 value = 8
position 2 = 7 value = N/A Temporary Array Original Array
position 3 = 6 value = 0
1 2 5 8 3 4 6
min position = 0
middle position = 3 max position = 6
1 2 3 4 5 6 0
• position 2 > max position
• copy from original to temporary
from position 1 to middle position
position 1 = 3 value = 8
position 2 = 7 value = N/A Temporary Array Original Array
position 3 = 6 value = 0
1 2 5 8 3 4 6
min position = 0
middle position = 3 max position = 6
1 2 3 4 5 6 0
• position 2 > max position
• copy from original to temporary
from position 1 to middle position
position 1 = 3 value = 8
position 2 = 7 value = N/A Temporary Array Original Array
position 3 = 6 value = 0
1 2 5 8 3 4 6
min position = 0
middle position = 3 max position = 6
1 2 3 4 5 6 8
• position 2 > max position
• copy from original to temporary
from position 1 to middle position
position 1 = 3 value = 8
position 2 = 7 value = N/A Temporary Array Original Array
position 3 = 7 value = N/A
1 2 5 8 3 4 6
min position = 0
middle position = 3 max position = 6
1 2 3 4 5 6 8
• position 2 > max position
• copy from original to temporary
from position 1 to middle position
position 1 = 3 value = 8
position 2 = 7 value = N/A Temporary Array Original Array
position 3 = 7 value = N/A
1 2 5 8 3 4 6
min position = 0
middle position = 3 max position = 6
position 1 = 3 value = 8
position 2 = 7 value = N/A Temporary Array Original Array
position 3 = 7 value = N/A
1 2 5 8 3 4 6
min position = 0
middle position = 3 max position = 6
1 2 3 4 5 6 8
• position 3 = length of temporary array • copy everything from the temporary
position 1 = 3 value = 8
position 2 = 7 value = N/A Temporary Array Original Array
position 3 = 7 value = N/A
1 2 5 8 3 4 6
min position = 0
middle position = 3 max position = 6
1 2 3 4 5 6 8
• position 3 = length of temporary array
• copy everything from the temporary
position 1 = 3 value = 8
position 2 = 7 value = N/A Temporary Array Original Array
position 3 = 7 value = N/A
1 2 5 8 3 4 6
min position = 0
middle position = 3 max position = 6
1 2 3 4 5 6 8
• position 3 = length of temporary array
• copy everything from the temporary
1 2 3 4 5 6 8
1 2 5 8 3 4 6
2 8 1 5
2 8 5 1 3 4
6 3 4
1 2 3 4 5 6 8
1 2 5 8 3 4 6
2 8 1 5
2 8 5 1 3 4
6 3 4
1 2 3 4 5 6 8