static T[] Rotate(int n, T[] arr) { var temp = new T[arr.Length]; for (int i = 0; i < arr.Length; i++) { var destIndex = i - n; if (destIndex < 0) { var mul = -1 * destIndex / arr.Length; destIndex = (arr.Length * mul) + destIndex; if (destIndex < 0) destIndex = arr.Length + destIndex; } temp[destIndex] = arr[i]; }
return temp;
}
void Main() { Rotate(5000, new[] {1,2,3,4}).Dump(); }