Luaにおける配列全ソート
2933 ワード
まずコードを見てください.
コードはとても简単で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
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