Это то же самое, что поменять местами две неравные "половинки" одного массива.
1) Реверсируем каждую из половинок (т.е., первый элемент станет последним, второй - предпоследним и т.д. Это тривиальный алгоритм, который я оставляю пытливому читателю:
{5, 6, 7}, {1, 2, 3, 4)
|
{7, 6, 5}, {4, 3, 2, 1}
2) Реверсируем массив целиком:
{1, 2, 3, 4},{5, 6, 7}
Время - O(N), доп. памяти надо - 1 штука (а можно и без нее, если элементами являются числа).
В принципе, это классический, хорошо известный алгоритм.