Given an array with integers, with each integer being at most n positions away from its final position, what would be the best sorting algorithm?
I’ve been thinking for a while about this and I can’t seem to get a good strategy to start dealing with this problem. Can someone please guide me?
I’d split the list (of size N) into 2n sublists (using zero-based indexing):
list 0: elements 0, 2n, 4n, …
list 1: elements 1, 2n+1, 4n+1, …
…
list 2n-1: elements 2n-1, 4n-1, …
Each of these lists is obviously sorted.
Now merge these lists (repeatedly merging 2 lists at a time, or using a min heap with one element of each of these lists).
That’s all. Time complexity is O(N log(n)).
This is easy in Python: