当前位置:   article > 正文

将数组中的所有元素依次循环右移k个位置_设计算法将数组an]的每个元素都循环地右移k位,这里0

设计算法将数组an]的每个元素都循环地右移k位,这里0

比如说数组{ 1, 2, 3, 4, 5 },右移2位,得到的结果应该是{4,5,1,2,3}

方法1:

  1. /// 数据arr右移k位
  2. /// </summary>
  3. /// <param name="arr"></param>
  4. /// <param name="k"></param>
  5. /// <returns></returns>
  6. public static int[] ArrayDisplacement(int[] arr, int k)
  7. {
  8. // 定义一个和原数组长度相同的新数组
  9. int[] newarr = new int[arr.Length];
  10. // 右移k位和右移k+arr.Length位是一样的
  11. k = k % arr.Length;
  12. // 数组内的元素全部右移k位
  13. for (int i = 0; i < arr.Length; i++)
  14. {
  15. // 当前元素右移k位尚未超出数组长度时,赋值给新数组i+k位,否则赋值给i + k - arr.Length
  16. if (i + k < arr.Length)
  17. {
  18. newarr[i + k] = arr[i];
  19. }
  20. else
  21. {
  22. newarr[i + k - arr.Length] = arr[i];
  23. }
  24. }
  25. return newarr;
  26. }

方法2:
数组右移之后和原来相比,可以将原数组从第k位分作两部分,两部分之间位置调换,就是右移k位了。

  1. /// 数组反转(从第下标m开始至下标n)
  2. /// </summary>
  3. /// <param name="arr"></param>
  4. /// <param name="m"></param>
  5. /// <param name="n"></param>
  6. public static void Reverse(ref int[] arr, int m, int n)
  7. {
  8. for (; m < n; m++, n--)
  9. {
  10. int t = arr[m];
  11. arr[m] = arr[n];
  12. arr[n] = t;
  13. }
  14. }
  15. int[] arr = { 1, 2, 3, 4, 5 };
  16. int k=2%arr.Length;
  17. Reverse(ref arr, 0, k);
  18. Reverse(ref arr, k+1, arr.Length-1);
  19. Reverse(ref arr, 0, arr.Length - 1);

这样就能实现数组所有元素右移了

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/567465
推荐阅读
相关标签