class Program
{/*
*字符串的全排列:(无重复元素)
*
* 题目:输入一个字符串,打印出该字符串中字符的所有排列。
* 例如输入字符串abc,则输出由字符a、b、c所能排列出来的所有字符串abc、acb、bac、bca、cab和cba。
*/
static void Main(string[] args)
{
char[] ch = { ‘a’, ‘b’, ‘c’, ‘d’ }; //构建字符数组
stringArrangement(ch,0,ch.Length); //调用求全排列的方法
Console.Read();
}
static void stringArrangement(char[] ch,int start,int end)
{
if (start!=end) //起始下标!=结束下标 说明仍存在>1的子字符数组 要继续进行递归
{
for (int i = start; i < end; i++) //从起始下标开始循环,直到结束下标为止
{
swap(ch,i, start); //交换起始下标位字符和第i位字符
// Console.Write(i+”—第一次交换—-“);
// Console.WriteLine(ch);
stringArrangement(ch,start+1,end); //起始下标右移一位后,再调用求全排列方法
swap(ch,i, start); //把刚才交换的字符归位
// Console.Write(i+ “—第二次交换—-“);
// Console.WriteLine(ch);
}
}
else //起始下标=结束下标
{
Console.WriteLine(ch); //输出新排列的字符数组
}
}
static void swap(char[] ch,int a, int b) //字符数组中两字符交换函数
{
char temp;
temp = ch[b];
ch[b] = ch[a];
ch[a] = temp;
}
}