Permutations: Difference between revisions

(→‎An Uncommon Ordering: another typo spotted dammit. Why can't I see these before I hit Save Page!)
Line 6,262:
[3, 2, 1]
</pre>
 
===Single yield iterator===
The output order is same as standard Heap's algorithm.
<lang nim>
iterator permutations[T](lis: var seq[T]): var seq[T] =
var
js = newSeq[int](lis.len)
i = 1
while true:
while js[i] <= i:
i -= 1
js[i] = 0
if i == 0:
yield lis
break
i += 1
if i == lis.len: break
let k = if (i and 1) == 0: 0 else: js[i]
swap lis[i], lis[k]
js[i] += 1
</lang>
 
===Translation of C===