python实现全排列

给定序列,输出其全排列

import time
def SWAP(i,j):
    temp=strAP[i]
    strAP[i]=strAP[j]
    strAP[j]=temp

strAP=['A','B','C','D']
def CalAllP1(first,num):
    if first==num-1: #到达最后一个元素,则退出
        return

    for i in range(first,num):
        if i!=first: #输出时去掉重复
            SWAP(i,first)
            print(strAP) 
        CalAllP1(first+1,num) #递归调用,全排列后面的元素
        SWAP(i,first)

beginTime=time.clock()
print(strAP)
CalAllP1(0,len(strAP))
endTime=time.clock()
print(endTime-beginTime)

给定序列,按字典序输出排列

import time
def SWAP(i,j):
    temp=strAP[i]
    strAP[i]=strAP[j]
    strAP[j]=temp

strAP=[1,2,3,4]

def Reverse(i,j):
    while i<=j:
        temp=strAP[i]
        strAP[i]=strAP[j]
        strAP[j]=temp
        i+=1
        j-=1
    
def CallAllPByDictionary(num): #字典序排列
    if num<1:
        return
    while True:
        j=num-2 
        for i in range(num-2,-1,-1):
            if strAP[i]strAP[i]:
                break

        SWAP(i,k)
        Reverse(k,num-1) #降序k后面的元素
        print(strAP)


CallAllPByDictionary(len(strAP))


你可能感兴趣的:(python)