надо так делать(изначальный шаг берите любой):
1 | 1024 | record1
2 | 2048 | record2
3 | 4096 | record3
теперь когда хотите переместить первую запись на второе место, то структуру надо поменять так:
1 | 3072 | record1
2 | 2048 | record2
3 | 4096 | record3
таким образом мы поменяли только одну запись
в конце концов через много таких операций у вас получится шаг между записями 1, тогда надо перестроить всю сортировку
P.S. попробуйте в sort хранить double и тогда делить пополам можно очень долго. я не знаю как сортировка по double повлияет на произодительность