📅  最后修改于: 2023-12-03 14:40:26.772000             🧑  作者: Mango
本程序旨在将给定字符串的所有排列打印出来。例如,如果输入字符串为"abc",则程序将打印"abc"、"acb"、"bac"、"bca"、"cab"、"cba"这6种排列。
程序的思路是采用递归的方式,不断交换字符串中的字符。
#include <stdio.h>
#include <string.h>
void swap(char *a, char *b)
{
char temp = *a;
*a = *b;
*b = temp;
}
void permutation(char *str, int start, int end)
{
// 字符串长度为1,输出排列结果
if (start == end) {
printf("%s\n", str);
return;
}
int i;
for (i = start; i <= end; i++) {
// 交换第一个字符与后面的字符
swap(str + i, str + start);
// 对余下的字符进行递归调用
permutation(str, start + 1, end);
// 恢复交换的字符
swap(str + i, str + start);
}
}
int main()
{
char str[50];
printf("请输入字符串:");
scanf("%s", str);
// 调用函数打印排列结果
permutation(str, 0, strlen(str) - 1);
return 0;
}
该函数用于交换两个字符的位置。在该算法中,用于交换第一个字符与后面的字符。
该函数为递归函数,用于进行排列操作。
str
:需要被操作的字符串;start
:字符串的起始位置;end
:字符串的结束位置。主函数用于输入字符串并调用permutation
函数打印排列结果。
本算法采用递归实现,通过交换字符的位置来进行排列操作,时间复杂度为O(n!)。