void MoveSubArrayToTheEnd(int[] array, int numberOfElements)
{
  int l=array.Length, n=numberOfElements%l, temp=0;
  for (int i=0, x=0, y=0; i<l; i++, y+=n, x=(x-n+(y%l+l-1)/l-1+l)%l)
  {
  int t = array[x];
  array[x] = y%l==0? array[(x+n)%l] : temp;
  temp = t;
  }
}

解决方案 »

  1.   

    就本函数的功能而言:将指定索引 numberOfElements之前的数据 按顺序移动到整个数组的后面;如:array={1, 2, 3, 4, 5, 6, 7, 8, 9, 10} ->MoveSubArrayToTheEnd(arry,5); 输出结果:6 7 8 9 10 1 2 3 4 5.....
      

  2.   

    不过算法 很牛逼 这有个简单的  效率还高一些..
            int[] MoveSubArrayToTheEnd2(int[] array, int n)
            {
                n = n % array.Length;
                int[] ary = new int[array.Length];
                for (int i = n ; i < array.Length; i++)
                {
                    ary[i-n] = array[i];
                }
                for (int i = 0; i < n; i++)
                {
                    ary[n+i] = array[i];
                }
                return ary;
            }