给定序列,输出其全排列
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))