Как переместить элемен в начало двоичного файла?
-- тут был неправильный коммент, я неточно прочел условие задачи
1. Всасывать весь файл в память - не катит даже для лабораторной работы. Если можно - задача не задача вообще.
2. Я бы прочел файл один раз, запомнил seek_pos для минимума и вторым проходом записал бы все в новый файл. Это 2N, плохо, но не смертельно. 
3. Код от ОП - дикий непролазный лес, отвратительный даже для студента-гуманитария
4. N*LogN можно получить чанками, но код запутается, что для лабы не очень.
Почему у вас память выделяется под int, а читаются байты размером с double?
Почему у вас поганый паскальский стиль с выделением переменных где-то далеко в начале программы и их использованием? Почему вы не объявили переменную i в заголовке цикла?
Почему вы используете функции из стандартной библиотеки C (fopen, fwrite, ...), хотя пишите на C++?
Зачем вы перемещаете указатель в начало файла сразу после открытия? Сразу после открытия указатель и так стоит на начале.
В том виде, как сделано у вас, можно все операции проделать в памяти, выполнив отображение файла.