1)算法的基本设计思想:
三次翻转,将数组视为ab(a代表数组的前p个元素,b代表数组的余下n-p个元素)
也可以先将a,b单独翻转,然后再整体翻转
2)使用c语言描述如下:
void Reverse(int R[],int left,int right){
int i,temp;
for(i=0;i<=(right-left)/2;i++){
temp=R[left+i];
R[left+i]=R[right-i];
R[right-i]=temp;
}
/*也可以写成int mid=(left+right)/2;
for(i=0;i<=mid-left;i++)*/
}
void Converse(int R[],int n,int p){
Reverse(R,0,p-1);
Reverse(R,p,n-1);
Reverse(R,0,n-1);
}
3)上述算法中三个Reverse函数的时间复杂度分别为O(p/2),O((n-p)/2),O(n/2)
两两对换,所以用了除以2次操作
故设计算法的时间复杂度为O(n),空间复杂度为O(1)