扫码加入训练营

牢记核心词

学习得礼盒

42.(13分)设将n(n>1)个整数存放到一维数组R中。试设计一个在时

2021-07-01 07:23:00来源:新东方在线

  【题目】

  (1) 给出算法的基本设计思想。

  (2) 根据设计思想,采用C或c++或Java语言描述算法,关键之处给出注释。(3)说明你所设计算法的时间复杂度和空间复杂度。

  【答案要点】

  (1) 给出算法的基本设计思想:

  先将n个数据x0,x1,xp,…,xn-1,…,xn-1原地逆置,得到xn-1,…,xp,xp-1,…,x0, 然后再将前n-p个和后p个元素分别原地逆置,得到最终结果:xp,xp+1,…,xn-1,x0,x1,…, xp-1。

  (2) 算法实现:

  void reverse(int r[ ],int left,int right)

  {

  int k=left,j=right,temp; //k等于左边界left,j等于右边界right while(k

  { //交换r[k]与r[j] temp:r[k]; r[k]=r[j]; r[j]=temp;

  k++: //k右移一个位置

  j--; //j左移一个位置

  }

  }

  void leftShift(int r[ ],int n,int p)

  {

  if(p>0&&p

  {

  reverse(r,0,n-1); //将全部数据逆置reverse(r,0,n-p-1); //将前n-p个元素逆置reverse(r,n-p,n-1); //将后p个元素逆置

  }

  }

  (3) 说明算法复杂性:上述算法的时间复杂度为0(n),空间复杂度为0(1)。



考研公开课小程序

考研英语核心词汇营

背词+听课+练习+督学,学习得礼盒

更多资料
更多>>
更多内容

关注新东方在线考研服务号

获得21考研真题及答案解析

1. 打开手机微信【扫一扫】,识别上方二维码;
2.点击【关注公众号】,获取资料大礼包。

考研资料大礼包
近10年考研真题及答案免费下载
更多>>
更多公开课>>
更多>>
更多资料