您的位置:首页 > 理论基础 > 数据结构算法

字符串的排列

2013-05-03 00:00 218 查看
/**
* 题目:输入一个字符串,打印出该字符串中字符的所有排列。例如输入字符串abc,则
* 输出由字符a、b、c所能排列出来的所有字符串abc、acb、bac、bca、cab和cba。
*/

#include <stdio.h>

static void swap(char array[], int i, int j)
{
char tmp = array[i];
array[i] = array[j];
array[j] = tmp;
}

static int contains(char array[], int m, int n)
{
for(int i = m; i < n; ++i)
{
if(array[i] == array
)
return 1;
}
return 0;
}

void permutation(char array[], int index, int n)
{
if(index == n)
{
for(int i = 0; i < n; ++i)
{
printf("%c", array[i]);
}
printf(" ");
}
else
{
for(int i = index; i < n; ++i)
{
// 去重比如字符数组是{'a', 'a', 'b'}
if(contains(array, index, i))
continue ;

swap(array, index, i);
permutation(array, index + 1, n);
swap(array, index, i);
}
}
}

main()
{
char array[] = {'a', 'b', 'c'};
permutation(array, 0, 3);
}

运行结果: abc acb bac bca cba cab
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  排列 数据结构 算法