本帖最后由 香川群子 于 2012-10-31 20:52 编辑
递归和循环都可以……
其实循环比递归效率更高一些,但是代码会比较复杂。
所以递归代码会好一点。
我的代码计算运行时间是0.1秒。(不含写入单元格)
而如果是用数组循环,则计算时间只要0.06秒。比你的代码快了几千倍吧?
楼主你好好消化消化吧……我是排列组合方面的专家。- Dim sj, jg(), m%, n%, k
- Sub kagawa_Permut()
- tms = Timer
- m = [a1].End(4).Row
- sj = [a1].Resize(m)
- n = [b1]
- If n = 0 Or n > m Then n = m
-
- AP = WorksheetFunction.Permut(m, n)
- ReDim jg(AP, n)
- k = 0
-
- Call dgPL("", 0)
- MsgBox Format(Timer - tms, "0.000s")
- [b3] = AP
- If k < 65536 Then [d1].CurrentRegion = "": [d1].Resize(AP, n + 1) = jg
- End Sub
- Sub dgPL(s, t)
- If t = n Then
- p = Split(s, ",")
- For j = 1 To n
- ' jg(k, j) = sj(p(j), 1)
- ' jg(k, 0) = jg(k, 0) & "," & sj(p(j), 1)
- jg(k, 0) = jg(k, 0) & sj(p(j), 1)
- Next
- ' jg(k, 0) = Mid(jg(k, 0), 2)
- k = k + 1
- Exit Sub
- End If
- For j = 1 To m
- If InStr(s & ",", "," & j & ",") = 0 Then Call dgPL(s & "," & j, t + 1)
- Next j
- End Sub
复制代码 |