数组循环移位

只允许使用2个变量(参考《编程珠玑》)

>> cat shift.c 
#include <stdio.h>

void shift(int a[], int n)
{
        int i, x;
        for(i = 0; i < n/2; i++)
        {
                int x = a[i];
                a[i] = a[n-1-i];
                a[n-1-i] = x;
        }
}

void solution(int a[], int n)
{
        int k = 5;
        shift(a, k);
        shift(a+k, n-k);
        shift(a, n);
}

void print(int a[], int n)
{
        int i = 0;
        for(; i < n; i++)
        {
                printf("%d ", a[i]);
        }
}

int main()
{
        int a[] = {1,2,3,4,5,6,7,8,9};
        int n = sizeof(a)/sizeof(int);
        solution(a, n);
        print(a, n);
}

运行结果:

>> ./a.out    
6 7 8 9 1 2 3 4 5


你可能感兴趣的:(数组循环移位)