zoukankan      html  css  js  c++  java
  • Lua中数组全排序

    先看代码:

     1 function permgen (a, n)
     2     if 0 == n then
     3         printResult(a)
     4     else
     5         for i=1,n do
     6         a[n], a[i] = a[i], a[n]
     7         permgen(a, n -1)
     8         a[n], a[i] = a[i], a[n]
     9         end
    10     end
    11 end
    12 
    13 function printResult (a)
    14     for i,v in ipairs(a) do
    15         io.write(v, "  ")
    16     end
    17     io.write("\n")
    18 end

    代码很简单不到20行,由于新手,思考了好久,算是差不多懂了,小记一下。

    函数中a表示的是输入的数组,n表示数组中元素个数。

    递归终止条件是n=0,这个算法的思想就是:依次将第一个数与最后一个数交换,然后固定,得到前面n-1个数的全排序。printResult函数就是直接输出一个数组。

    当n=1时,先将a[1]和a[1]交换,还是自己,接着判断,就输出当前的a;

    当n=2时,a:先将a[1]和a[2]交换,将a[1]放到最后固定。

                  b:此时得到n=1时候的数组,就可以直接输出,结果为a[2] a[1],然后返回。

                  c: 将a[1]和a[2]的位置换回。

                  d:for循环继续执行,a[2]和a[2]自身交换,此时数组:a[1] a[2],接着得到n=1,跳转到b:,直接输出a,为a[1] a[2]

    当n=3时,也是类似,先将a[1]月a[3]交换,然后固定最后一位,就得到n = 2,以此类推即可。

    author:good90

  • 相关阅读:
    多线程系列 线程池ThreadPool
    多线程系列 使用多线程的安全问题
    C#反射Assembly 详细说明
    Assembly(c#中简单说明[转]
    反射调用性能比较
    MFC控件GDI编程
    MFC控件第一讲.DC编程
    MFC原理第六讲.消息传递
    MFC原理第五讲.消息映射.以及如何添加消息
    MFC原理第四讲.动态创建机制
  • 原文地址:https://www.cnblogs.com/good90/p/2646293.html
Copyright © 2011-2022 走看看