Permutations by swapping: Difference between revisions

Small improvements in Python: recursive
(+ two D versions)
(Small improvements in Python: recursive)
Line 309:
===Python: recursive===
After spotting the pattern of highest number being inserted into each perm of lower numbers from right to left, then left to right, I developed this recursive function:
<lang python>def spermutationss_permutations(n):
def sperms_perm(items):
return [(tuple(item), -1 if i %2 else 1) for i, item in enumerate(sperm(n))]
if items <= 0:
return [[]]
else:
new_items = []
for i, item in spermenumerate(s_perm(items - 1)):
if diri ==% 12:
# step down
new_items += [item[:i] + [items - 1] + item[i:] for i in range(len(item) + 1)]\
new_items += [item[:i] + [items-1] + item[i:] for i in range(len(item), -1, -1)]
# step upelse:
else: # step up
new_items += [item[:i] + [items - 1] + item[i:] \
for i in range(len(item) + 1)]
return new_items</lang>
 
return [(tuple(item), -1 if i % 2 else 1) for i, item in enumerate(sperm(n))]
def sperm(items):
for i, item in enumerate(s_perm(n))]</lang>
if items <= 0:
return [[]]
else:
dir = 1
new_items = []
for item in sperm(items - 1):
if dir == 1:
# step down
new_items += [item[:i] + [items-1] + item[i:] for i in range(len(item), -1, -1)]
else:
# step up
new_items += [item[:i] + [items-1] + item[i:] for i in range(len(item) + 1)]
dir *= -1
return new_items</lang>
 
;Sample output: