算法学习笔记7-非递归方法写一个全排列

来源:互联网 发布:sql中exists的用法 编辑:程序博客网 时间:2024/06/06 07:27

非递归全排列

不用递归,只能用循环,在循环里对数组进行排序,每次交换两个元素的位置,直到数组是降序有序排列的。但是需要先对数组进行升序排序,才能输出所有全排列。

#coding=utf-8def myreverse(a,i,j):    while True:        if i>=j:            break        a[i],a[j]=a[j],a[i]        i+=1        j-=1def out(a,n):    for i in range(n-1):        print a[i],    print a[n-1]def permutation(a,n):    if n<2:        return    while True:        out(a,n)        i=n-2;        while i>=0:            if a[i]<a[i+1]:                break#从倒数第二个数往前遍历,寻找比后面的数小的数            elif i==0:                return            i-=1        j=n-1        while j>i:            if a[j]>a[i]:                break#从倒数第一个数往前遍历,寻找比上面找到的数大的数            j-=1        a[i],a[j]=a[j],a[i]#交换找到的这两个数        myreverse(a,i+1,n-1)#将第i个数后面的数倒置n=input()a=list(raw_input().split())a=[int(i) for i in a]permutation(a,n)
原创粉丝点击