Есть ли разница между двумя функциями?
не изобретайте велосипед)))
библиотека STL
используйте std::vector
и std::rotate
определение и пример
en.cppreference.com/w/cpp/algorithm/rotate
1. Будьте осторожны, перед нами динамический массив, сделанный расширением стека. Не на всех компиляторах есть, плюс стек ограничен парой мегабайт.
Нормализацию размера лучше сделать shift %= size;
Подпрограмма работает с локальной переменной и всё, что она делает, идёт на экран и больше никуда.
(вообще стоит разделять обработку и вывод!)
Время работы size.
2. Сдвигаем на один элемент нужное количество раз. Время работы shift·size.
3. Как за size «на месте»…квоПрох := НОД(shift, size)
для i = [0..квоПрох)
  i1 := i
  tmp := a[i]
  вечный цикл
    i2 := (i1 + shift) % size
    если i2 = i
      прервать вечный цикл
    a[i1] := a[i2]    
    i1 := i2
  a[i1] := tmp