- /* 向量旋转(旋转交换) */
- #include <stdio.h>
- int main(int argc, char *argv[]) {
- int i=0, j=0;
- int n;
- int step;
- int a[] = {1,2,3,4,5,6,7,8,9};
- int tmp; /* 临时 */
- int movenum = 0; /* 移动次数 */
- n = sizeof(a) / sizeof(int);
- step = 4;
- step = step % n;
- /* 这个需要放在循环的前面,好让那些不需要移动的情况直接退出,比如n个数字移动 x*n 次,实质上根本不需要移动. */
- if(!step) return 0;
- while(movenum < n)) {
- tmp = a[i];
- j = i;
- while(((j+step)%n) != i) {
- a[j] = a[((j+step)%n)];
- movenum++;
- j = ((j+step)%n);
- }
- a[j] = tmp;
- movenum++;
- i++;
- }
- for(i=0; i < n; i++) {
- printf("%d\\n", a[i]);
- }
- return 0;
- }
- //该片段来自于http://www.codesnippet.cn/detail/311020136841.html
来源: http://www.codesnippet.cn/detail/311020136841.html