给定序列,输出其全排列
- 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+1]:
- break
- j-=1 #条件都满足,循环自然退出时i=0,加一个变量标志退出大循环
- if j<0: #数组元素都为降序时,已输出了所有满足要求的序列,退出大循环
- break
- for k in range(num-1,i,-1): #找出i右边大于i元素的最小元素k;i右边的元素为降序,默认第一个大于i元素即是最小元素k
- if strAP[k]>strAP[i]:
- break
- SWAP(i,k)
- Reverse(k,num-1) #降序k后面的元素
- print(strAP)
- CallAllPByDictionary(len(strAP))