C语言数组操作(leftShift,rightShift,perm)

左移

1
2
3
4
5
6
7
8
9
10
11
void leftShift(int *arr, int n, int k){
    int tmp;
    int i;
    while(k--){
        tmp = arr[0];
        for(i=0;i<n-1;i++){
            arr[i] = arr[i+1];
        }
        arr[n-1] = tmp;
    }
}

右移

1
2
3
4
5
6
7
8
9
10
11
void rightShift(int *arr, int n, int k){
    int tmp;
    int i;
    while(k--){
        tmp = arr[n-1];
        for(i=n-1;i>0;i--){
            arr[i] = arr[i-1];
        }
        arr[0] = tmp;
    }
}

全排列

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
void perm(char *list,int i,int n){
    int j,temp;
    if(i == n){
        for(j=0;j<=n;j++){
            printf("%d",list[j]);
        }
        printf("  ");
    } else {
        for(j=i;j<=n;j++){
            SWAP(list[i],list[j],temp);
            perm(list, i+1, n);
            SWAP(list[i], list[j], temp);
        }
    }
}

int main(int argc, const char * argv[])
{
    int arr[] = {1,2,3,4,5};
    perm(&arr, 0, 4);
}