早教吧作业答案频道 -->其他-->
试设计一个算法,将数组R中R[0]至R[N-1]循环右移P位,并要求只用一个单位大小的附加存储,数组中元素移动或交换次数为O(n).要求用C++表述算法
题目详情
试设计一个算法,将数组R中R[0]至R[N-1]循环右移P位,并要求只用一个单位大小的附加存储,数组中元素移动或交换次数为O(n).
要求用C++表述算法
要求用C++表述算法
▼优质解答
答案和解析
这是《编程珠玑》里的一个例子
分三步:
第一步:把整个数组首尾颠倒(即第一个和最后一个换位,第二个和倒数第二个换等等)
第二步:再把调换后的数组前n-p个数首尾颠倒
第三部:最后把数组末p个数首尾颠倒
可以验证经过上述操作的结果就等于数组循环右移p位,而且每次两个数组元素对调只需要一单位附加存储,共需要调换n次
分三步:
第一步:把整个数组首尾颠倒(即第一个和最后一个换位,第二个和倒数第二个换等等)
第二步:再把调换后的数组前n-p个数首尾颠倒
第三部:最后把数组末p个数首尾颠倒
可以验证经过上述操作的结果就等于数组循环右移p位,而且每次两个数组元素对调只需要一单位附加存储,共需要调换n次
看了 试设计一个算法,将数组R中R...的网友还看了以下:
有图,圆C经过坐标原点O并与坐标轴交于A,D两点圆C过坐标原点O并与坐标轴交于A,D两点已知角OB 2020-05-16 …
如图,圆o的半径为6,线段AB与圆o相交于点C、D,AC=4,AC=4,∠BOD=∠A,OB与圆o 2020-05-17 …
已知:∠MAN=30°,O为边AN上一点,以O为圆心,2为半径作⊙O,交AN于D、E两点,设AD为 2020-06-17 …
如图,在△ABC中,∠A=90°,∠B=60°,AB=3,点D从点A以每秒1个单位长度的速度向点B 2020-07-20 …
如图,AB是⊙O的直径,BC是⊙O的切线,OC与⊙O相交于点D,BC=3,CD=2AB是⊙O的直径 2020-07-21 …
如图,⊙O的半径为6,线段AB与⊙O相交于点C、D,AC=4,∠BOD=∠A,OB与⊙O相交于点E 2020-07-24 …
如图,以Rt△ABC的直角边AB为直径作O,交斜边AC于点D,点E为OB的中点,连接CE并延长交O 2020-07-24 …
以椭圆的右焦点F2为圆心作一个圆,使此圆过椭圆的中心O并交椭圆于点M、N,若过椭圆的左焦点F1的直 2020-07-26 …
如图,平行四边形ABCD中,PQ过点O并交AB于点P,CD交点Q,OP=2,AD=4,AB=6,求四 2020-11-28 …
1.如图,AD平分∠BAC,点E在AB上,EF⊥AD于O并交AC于F.求证:∠BED=∠DFC.2. 2020-11-28 …