输入一个n,输出1-n的全排列。
跪求了。最好是效率高一点的。

解决方案 »

  1.   

    比如:n=3,那么,全排列个数就有n!个。123,132,213,231,312,321。
    我在csdn,搜索到一个代码,但是效率太低了,算n=9,就用了1分20秒。是不是用了递规效率低啊,能者帮忙。
      

  2.   

    算应该比较快,输出要慢些:Sub pailie(ByVal n As Integer, ByRef x() As String)
    Dim starttime As Single, endtime As Single
    Dim i As Long, j As Long, k As Integer, Num As Long
    Dim ALL(), TEMP1 As Long, TEMP2 As Long
    starttime = Timer '开始计时
    Num = 1
    For i = 1 To n
    Num = Num * i '递归计算n!
    Next
    ReDim x(1 To Num)
    For i = 1 To Num
    ReDim ALL(1 To n) '初始化数组all
    ALL(1) = 1
    TEMP1 = i
    For j = 2 To n
    TEMP2 = TEMP1 Mod j
    TEMP1 = TEMP1 \ j
    If TEMP2 = 0 Then
    ALL(j) = j 'temp2为 0则放在最后
    Else
    For k = j To TEMP2 + 1 Step -1
    ALL(k) = ALL(k - 1) ' temp2之后的元素后移一位
    Next
    ALL(TEMP2) = j  'temp2不为 0 则置于第temp2个元素前
    End If
    Next
    x(i) = Join(ALL, " ")
    'Debug.Print x(i) '输出
    Next
    endtime = Timer
    Debug.Print "共 " & Num & " 种排列!用时 " & endtime - starttime & " 秒!"
    End SubPrivate Sub Command1_Click()
    Dim x() As String
    pailie 9, x
    MsgBox x(1001)
    End Sub
      

  3.   

    希望对你有所帮助:
    http://blog.csdn.net/northwolves/archive/2004/07/21/47601.aspx
    http://blog.csdn.net/northwolves/archive/2004/07/21/47413.aspx
    http://blog.csdn.net/northwolves/archive/2004/07/21/47400.aspx