It looks to me that defragging is doing needles file moving.
Instead of using files at the end (past 50 or even 75%) of the disk is easy hops to some closeby files to use,
resulting in gaps that need to be filled by other files later in the proces.
In my view it should use files placed last to fill up the gaps and not some randomly closeby files.
This would result in less needed file movement and by that a faster degragging proces ... but hey im no expert