数组的数据由(x0x1.......xn)变换为(xpXptle.., Xn-1,x0,X1,..,xp1)反转

设将n(n~1)个整数存放在一维数组 R中。试着设计一个在吋
间复杂度和空间复杂度都尽可能高效的算法,将R中保存的序列循环左移p
(0spsn)个位置,即将R中的数据由(x0x1xn1)变换为(xp
Xptle.., Xn-1,x0,X1,..,xp1)

void Reverse (int R[], int left, int right){
//将数组原地逆置
   int ¡= left, j= right;
   while(i<i){
       int tmp=R[i];
       R[i]= R[j];
       R[j]=tmp;
       i++;   //右移动一个位置
       j--;   //左移一个位置
   }
}


void LeftShift(int R[], int n, int p)
// 将长度为口的数组R中的数据循环左移p个位置
     if(p>0 && p≤n){
         Reverse(R,0,n-1);
         //将数组全部逆置
         Reverse(R,0,n-p-1);
         //将前 n-p 个数据逆置
         Reverse(R,n-p,n-1);
         //将后 p个数据逆置
     }
}

假设有数组:(321)(654) ,此时,n为6,p为3;

a: 0—5反转。(n-1=5);得(456)(123)

b: 0—2反转。(n-p-1=2);得(654)(123)

c: 3—5反转。  (654)(321)

n

猜你喜欢

转载自blog.csdn.net/weixin_43537097/article/details/127791306
x1