int main()
{
int array[] = {1,2,3,4,5,6,7,8,9};
int len = sizeof(array)/sizeof(int);
int i;
for(i=0; i<len; ++i)
std::cout<<array[i]<<" ";
std::cout<<std::endl;
SwapN(array, sizeof(array)/sizeof(int), 3);
for(i=0; i<len; ++i)
std::cout<<array[i]<<" ";
std::cout<<std::endl;
return 0;
}
// int array[] : 待操作的数组
// int nLen : 数组长度
// int k : 起始位置
void SwapN(int array[], int nLen, int k)
{
k = k % nLen;
if(k == 0)
return;
if(k < 0)
k += nLen;
int count = 0;
int index = 0;
int initpos = -1;
while(count < nLen)
{
++initpos;
int temp = array[initpos];
for(index=initpos; (index+k)%nLen!=initpos; index=(index+k)%nLen)
{
array[index] = array[(index+k)%nLen];
++count;
}
array[nLen + initpos - k] = temp;
++count;
}
}