# Talk:Cycle sort

Active discussions
WikiProject Computing / Software / CompSci (Rated Start-class, Low-importance)
This article is within the scope of WikiProject Computing, a collaborative effort to improve the coverage of computers, computing, and information technology on Wikipedia. If you would like to participate, please visit the project page, where you can join the discussion and see a list of open tasks.
Start  This article has been rated as Start-Class on the project's quality scale.
Low  This article has been rated as Low-importance on the project's importance scale.

## Pseudocode verification tool

This Python script verifies that the article's pseudocode both sorts correctly and does the theoretical minimum number of writes for all sort-distinguishable arrays (['b', 'b', 'c', 'a'] and [25, 25, 1003, -5] are indistinguishable to a sorter, so you need check only one of each kind) of a certain length. I've tested it with lengths 0 through 10. — Olathe (talk) 20:00, 4 October 2010 (UTC)

``` import itertools

def test(length=5):
if length == 0:
arr = []
print arr,
writes = cycleSort(arr)
print writes
if writes != 0:
print "ERROR: cycleSort made excessive writes!"
if len(arr) != 0:
print "ERROR: cycleSort changed array length!"
return
# Horribly inefficient way to test all sorting-unique test vectors.
for tup in itertools.product(range(length), repeat=length):
arr = [x for x in tup]
seq = True
for i in range(max(arr)):
if not (i in arr):
seq = False
if seq:
bak = sorted(arr)
neededWrites = length
for i in range(len(arr)):
if arr[i] == bak[i]:
neededWrites -= 1
print arr,
writes = cycleSort(arr)
print writes
if len(arr) != length:
print "ERROR: cycleSort changed array length!"
return
if arr != bak:
print "ERROR: cycleSort didn't sort right!"
return
if writes != neededWrites:
print "ERROR: cycleSort made excessive writes!"
return
```