解法1:向右循环移位k次,等价于对数组做k次向右一次的循环
解法2:当k大于N时,解法一不适用。而此时移位k次的效果与k%N的效果相同,即k>N时,右移k次等价于右移k%N次
解法3:逆序排列
code:
// fdsfsd.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <iostream>
using namespace std;
void Reverse(int *arr,int b,int e)
{
for(;b<e;++b,--e)
{
int temp = arr[b];
arr[b] = arr[e];
arr[e] = temp;
}
}
void Shift(int *arr,int N,int k)
{
k %= N;
Reverse(arr,0,N-k-1);
Reverse(arr,N-k,N-1);
Reverse(arr,0,N-1);
}
int _tmain(int argc, _TCHAR* argv[])
{
int a[8] = {5,6,7,8,1,2,3,4};
Shift(a,8,2);
for(int i = 0 ; i < 8 ; ++i)
cout<<a[i]<<" ";
cout<<endl;
return 0;
}