设将n(n>1)个整数存放到一维数组R中。试设计一个在时间和空间两方面都尽可能高效的算法。将R中保存的序列循环左移p(0<p<n)个位置,即将R中的数据由(X0,X1,…,Xn-1)变换为(Xp,Xp+1,…Xn-1,X0,X1,…,Xp-1)。 要求:

admin2015-12-30  51

问题 设将n(n>1)个整数存放到一维数组R中。试设计一个在时间和空间两方面都尽可能高效的算法。将R中保存的序列循环左移p(0<p<n)个位置,即将R中的数据由(X0,X1,…,Xn-1)变换为(Xp,Xp+1,…Xn-1,X0,X1,…,Xp-1)。
要求:
给出算法的基本设计思想。

选项

答案算法的基本设计思想: 可以将这个问题看作是把数组ab转换成数组ba(a代表数组的前p个元素,b代表数组中余下的n-p个元素),先将a逆置得到a-1b,再将b逆置得到a-1b-1,最后将整个a-1b-1逆置得到(a-1b-1)=ba。 设Revere函数执行将数组元素逆置的操作,对abcdefgh向左循环移动3(p=3)个位置的过程如下: Reverse(0,p-1)得到cbadefgh: Reverse(p,n-1)得到cbahgfed; Reverse(0,n-1)得到defghabc。 注:Reverse中,两个参数分别表示数组中待转换元素的始末位置。

解析
转载请注明原文地址:https://kaotiyun.com/show/o7xi777K
0

最新回复(0)