求输入字符串的全排列 (无重复元素)

    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;

        }

    }

点赞