算法—字符串顺序平移
原理:矩阵的转置思想
代码:
#include <stdio.h>
#include <stdlib.h>
void swap(char *a,int i, int j) {
char temp = a[i];
a[i] = a[j];
a[j] = temp;
}
void invert(char *a,int s, int e) {
for (int i = 0; i < (e-s+1) / 2; i++) {
swap(a,s + i,e - i);
}
}
void printChar(char *a, int n) {
for (int i = 0; i < n; i++) {
printf("%c", a[i]);
}
}
void movePart(char* a,int k,int n) {
invert(a,k, n);
invert(a, 0, k - 1);
invert(a, 0, n);
}
int main42() {
char a[10] = "123456789";
int length = sizeof(a) / sizeof(a[0])-1;
int k = 3;
printf("向前平移%d个单元前:\n",k);
printChar(a,length);
printf("\n向前平移%d个单元后\n",k);
movePart(a, k, length-1);
printChar(a, length);
printf("\n");
system("pause");
return 0;
}
测试截图:
![请添加图片描述](https://img-blog.csdnimg.cn/688c243c250d4934b7e64dac8566b25b.png)
时间复杂度O(n),空间复杂度O(1)
如果存在什么问题,欢迎批评指正!谢谢!