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

  【题目】

  (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)。



MORE+

    相关阅读 MORE+

    版权及免责声明
    1.凡本网注明"稿件来源:新东方在线"的所有文字、图片和音视频稿件,版权均属北京新东方迅程网络科技有限公司所有,任何媒体、网站或个人未经本网协议授权不得转载、链接、转贴或以其他方式复制发表。已经本网协议授权的媒体、网站,在下载使用时必须注明"稿件来源:新东方在线",违者本网将依法追究责任。
    2.本网末注明"稿件来源:新东方在线"的文/图等稿件均为转载稿,本网转载出于传递更多信息之目的,并不意味着赞同其观点或证实其内容的真实性。如其他媒体、网站或个人从本网下载使用,必须保留本网注明的"稿件来源",并自负版权等法律责任。如擅自篡改为"稿件来源:新东方在线”,本网将依法追究责任。
    3.如本网转载稿涉及版权等问题,请作者致信weisen@xdfzx.com,我们将及时外理

    Copyright © 2011-202

    All Rights Reserved