Luaにおける配列全ソート

2933 ワード

まずコードを見てください.
 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("
") 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