设将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
本文发布于:2024-01-29 13:29:08,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170650615315609.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |