• C#字符串全排序


    排列:从n个元素中任取m个元素,并按照一定的顺序进行排列,称为排列;

    全排列:当n==m时,称为全排列;

    比如:集合{ 1,2,3}的全排列为:

    { 1 2 3}

    { 1 3 2 }

    { 2 1 3 }

    { 2 3 1 }

    { 3 2 1 }

    { 3 1 2 }

    我们可以将这个排列问题画成图形表示,即排列枚举树,比如下图为{1,2,3}的排列枚举树,此树和我们这里介绍的算法完全一致;

    算法思路:

    (1)n个元素的全排列=(n-1个元素的全排列)+(另一个元素作为前缀);

    (2)出口:如果只有一个元素的全排列,则说明已经排完,则输出数组;

    (3)不断将每个元素放作第一个元素,然后将这个元素作为前缀,并将其余元素继续全排列,等到出口,出口出去后还需要还原数组;

     static void Main(string[] args)
            {
                string s = "123";
                char[] str = s.ToCharArray();
                perm(str, 0, s.Length);
                //permNotSame(str, 0, s.Length);
            }
    
            /// <summary>
            /// 全排序
            /// </summary>
            /// <param name="a"></param>
            /// <param name="begin"></param>
            /// <param name="end"></param>
            static void perm(char[] a, int begin, int end)
            {
                if (begin == end)
                {               
                    for (int i = 0; i < begin; i++)
                    {
                        Console.Write(a[i]);                   
                    }
                    Console.WriteLine("");
                }
                else
                {
                    for (int j = begin; j < end; j++)
                    {
                        swap(a, begin, j);
                        perm(a, begin + 1, end);
                        swap(a, j, begin);
                    }
                }
            }
    
    
            /// <summary>
            /// 交换数组 索引x和y位置的值
            /// </summary>
            /// <param name="a"></param>
            /// <param name="x"></param>
            /// <param name="y"></param>
            static void swap(char[] a, int x, int y)
            {
                char temp = a[x];
                a[x] = a[y];
                a[y] = temp;
            }       
    

      测试结果:

  • 相关阅读:
    人月神话阅读笔记01
    个人每日总结14
    个人每日总结13
    个人每日总结12
    个人每日总结11
    个人每日总结10
    个人每日总结9
    第五周学习进度表
    梦断代码阅读笔记
    05构建之法阅读笔记之五
  • 原文地址:https://www.cnblogs.com/clc2008/p/6900368.html
Copyright © 2020-2023  润新知