Talk:Cycle sort

From Wikipedia, the free encyclopedia
Jump to: navigation, search
WikiProject Computing / Software / CompSci (Rated Start-class, Low-importance)
WikiProject icon 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-Class article 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.
Taskforce icon
This article is supported by WikiProject Software (marked as Low-importance).
Taskforce icon
This article is supported by WikiProject Computer science (marked as Mid-importance).
 

Pseudocode verification tool[edit]

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