码迷,mamicode.com
首页 > 编程语言 > 详细

数组循环位移K位

时间:2015-07-07 18:32:49      阅读:118      评论:0      收藏:0      [点我收藏+]

标签:

来自《编程珠玑》,将数组看成一个向量x=ab,那么循环右移后数组就变成ba。从向量的角度考虑
(a-1b-1)-1=ba
 

/* 不用临时变量交换a[begin]和a[end]两内存单元的内容 */
void stringReverse(char a[], int begin, int end)
{
    for(; begin < end; begin++, end--){
        a[begin] ^= a[end];
        a[end] ^= a[begin];
        a[begin] ^= a[end];
    }
}

void loopRightShift(char a[], int n, int k)
{
    k %= n;
    
    stringReverse(a, 0, n-k-1); /* 先对a[0...n-k-1]这(n-k)个字符逆序 */
    stringReverse(a, n-k, n-1); /* 再对a[n-k...n-1]这k个字符逆序 */
    stringReverse(a, 0, n-1);   /* 最后对整个字符串逆序 */
}

数组循环位移K位

标签:

原文地址:http://www.cnblogs.com/bendantuohai/p/4627500.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!