Added some of your comments.

Quick correction: I meant SRTF <= SJF <= FCFS. Also, you have to take
into account that it's possible to get CPU/IO bursts of length 0 which
are just thrown out. So it's possible to get a process with IO left but
with no CPU left, so if terminate a process as soon as it runs out of
CPU bursts, we ignore the remaining IO bursts.