全排列:简单讲是从N个不同元素中取出M个,按照一定顺序排成一列,通常用A(N,M)表示。当M=N时,称为全排列.
下例展示了展示了{1,"a",3,"c"}这4个数全排列。总的排列数为A(4,4)=4!=24种。输出代码如下:
Dim N '用于增加动态数组下标
Sub perm(arr, k, m, brr()) '全排列
'arr为需要全排列的数组。k为数组下标,m为上标,brr为存放结果的数组
Dim i As Integer
If k > m Then
N = N + 1
For i = 0 To m
ReDim Preserve brr(1 To m + 1, 1 To N)
brr(i + 1, N) = arr(i)
Next i
Else
For i = k To m
Call swap(arr, k, i)
Call perm(arr, k + 1, m, brr())
Call swap(arr, k, i)
Next i
End If
End Sub
Sub swap(arr, i, j) '数据交换
Dim t
t = arr(i)
arr(i) = arr(j)
arr(j) = t
End Sub
Sub main()
Dim brr()
N = 0
arr = Array(1, "a", 3, "c") '对arr全排列
Call perm(arr, LBound(arr), UBound(arr), brr)
[A1].Resize(UBound(brr, 2), UBound(brr)) = Application.Transpose(brr)
End Sub
结果如下图: