时间复杂度O(n),空间复杂度O(1)
#include <stdio.h>
void print(int *arr,int n){
for(int i=0;i<n;i++){
printf("%d ",arr[i]);
}
printf("\n");
}
void rev(int arr[],int start,int end){
int i,t;
if(start<end){
for(i=0;i<=(end-start)/2;i++){
t=arr[start+i];
arr[start+i]=arr[end-i];
arr[end-i]=t;
}
}
}
void reverse(int arr[],int n,int p){
rev(arr,0,p-1); print(arr,n);
rev(arr,p,n-1); print(arr,n);
rev(arr,0,n-1); print(arr,n);
}
/*循环右移
void reverse(int arr[],int n,int p){
rev(arr,0,n-1); print(arr,n);
rev(arr,0,p-1); print(arr,n);
rev(arr,p,n-1); print(arr,n);
}*/
int main(){
int p;
int arr[]={1,2,3,4,5,11,22,33,44,55,66};
int n=sizeof(arr)/sizeof(int);
printf("请输入p:");
scanf("%d",&p);
reverse(arr,n,p);
print(arr,n);
return 0;
}
测试结果
请输入p:4
4 3 2 1 5 11 22 33 44 55 66
4 3 2 1 66 55 44 33 22 11 5
5 11 22 33 44 55 66 1 2 3 4
5 11 22 33 44 55 66 1 2 3 4
Program ended with exit code: 0