将数组内的元素循环左移P个位置

问题可以转化为将数组内前 n 个元素进行逆置,再将后(n-p)个元素逆置,最后将整个数组逆置

 

void Reverse(int A[],int pos1,int pos2){
    // 将A[pos1]与A[pos2]的值互换
    while(pos1 < pos2){
        A[pos1] += A[pos2];
        A[pos2] = A[pos1] - A[pos2];
        A[pos1] = A[pos1] - A[pos2];
        pos1++;
        pos2--;
     }
 }
 
void Converse(int A[],int n,int p){
    p = p % n;    //等价于右移(n-p)个位置
    reverse(A,0,p-1);
    reverse(A,p,n-1);
    reverse(A,0,n-1);
}

 

posted on 2020-02-10 15:51  黎夜  阅读(593)  评论(0编辑  收藏  举报