数组循环移位
时间:2010-11-08 来源:guocai_yao
a | ... | a+n-k-1 | a+n-k | ... | a+n-1 |
void loopRightShiftV2(char a[], int n, int k) |
「方法2」 先看循环右移一个字符的思路:首先,保存最有一个非'\0'字符;然后将字符数组从最后一个非'\0'字符开始,依次后移;最后将已保存的最后一个字符放到第一字符所在位置处。循环右移k个字符,只需将上述过程重复k次即可。
void loopRightShift(char a[], int n, int k) |
「方法3」 初始状态
c1 |
c2 |
... |
cn-k-1 |
cn-k |
cn-k+1 |
cn-k+2 |
... |
cn-1 |
cn |
逆序一次后 |
cn-k |
cn-k-1 |
... |
c2 |
c1 |
cn |
cn-1 |
... |
cn-k+2 |
cn-k+1 |
再整体逆序,循环右移完成。
cn-k+1 |
cn-k+2 |
... |
cn-1 |
cn |
c1 |
c2 |
... |
cn-k-1 |
cn-k |
/* 不用临时变量交换a[begin]和a[end]两内存单元的内容 */ |
参考文章: 1. http://www.cppblog.com/yuanyuelang/archive/2009/09/12/96023.aspx