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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM