talk is cheap,show me the code.
运行结果:
代码如下:
// C语言 字符串全排列 递归 & 非递归
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
// 交换两个字符
void swap(char *x, char *y) {
char temp = *x;
*x = *y;
*y = temp;
}
// 递归函数生成全排列
void permute(char *str, int l, int r) {
int i;
if (l == r) {
puts(str);
}
else {
for (i = l; i <= r; i++) {
swap((str + l), (str + i));
permute(str, l + 1, r);
swap((str + l), (str + i)); // 还原字符串,为了下次循环交换不同的字符位置
}
}
}
// 非递归方式生成全排列
void permute2(char *str, int n) {
int i, j, k;
int* c = (int*)malloc(n * sizeof(int));
for (i = 0; i < n; i++) {
c[i] = 0;
}
puts(str);
i = 0;
while (i < n) {
if (c[i] < i) {
if (i % 2 == 0)
swap(&str[0], &str[i]);
else
swap(&str[c[i]], &str[i]);
printf("%s\n", str);
c[i]++;
i = 0;
} else {
c[i] = 0;
i++;
}
}
free(c);
}
int main() {
char str[100] = "12345789abcdefg";
int n = strlen(str);
puts("全排列 递归算法输出:");
permute(str, 0, n - 1);
puts("\n全排列 非递归算法输出:");
permute2(str,n);
return 0;
}
本文暂时没有评论,来添加一个吧(●'◡'●)