如何实现一个数组每个元素依次向右移动k位。(后头的往前面补) 比如: [1, 2, 3, 4, 5] 挪两位变成[4, 5, 1, 2, 3]?
/// <summary>
/// 数组移动算法
/// </summary>
class MechanismMove
{
#region 数组依次右移算法
/// <summary>
/// 数组依次右移算法
/// </summary>
/// <param name="arrData">原始数组</param>
/// <param name="k">移动的位数</param>
public static void rightMoveData(int[] arrData, int k)
{
if (k <= 0) { return; }
int len = arrData.Length;
int newK = k % len;
int temp;
for (int i = 0; i < newK; i++)
{
//存储最后一个值
temp = arrData[len - 1];
for (int j = len - 2; j >= 0; j--)
{
//后面的值被前面的值覆盖
arrData[j + 1] = arrData[j];
}
arrData[0] = temp;
}
//输出
Console.WriteLine("array right move {0}", k);
foreach (var item in arrData)
{
Console.Write("{0} ", item);
}
}
#endregion
#region 数组依次左移算法
/// <summary>
/// 数组依次左移算法
/// </summary>
/// <param name="arrData">原始数组</param>
/// <param name="k">向左移动位数</param>
public static void leftMove(int[] arrData, int k)
{
if (k <= 0) { return; }
int len = arrData.Length;
int newK = k % len;
int temp;
for (int i = 0; i < newK; i++)
{
temp = arrData[0];
for (int j = 0; j <= len - k; j++)
{
//前面的值被后面覆盖
arrData[j] = arrData[j + 1];
}
arrData[len - 1] = temp;
}
//输出
Console.WriteLine("{0}array left move {1}", "\n", k);
foreach (var item in arrData)
{
Console.Write("{0} ", item);
}
}
#endregion
}
输出结果如下: