import timeit
def cycleSort( vector) :
writes = 0
# Loop through the vector to find cycles to rotate.
for cycleStart, item in enumerate ( vector) :
# Find where to put the item.
pos = cycleStart
for item2 in vector[ cycleStart + 1 :] :
if item2 < item:
pos += 1
# If the item is already there, this is not a cycle.
if pos == cycleStart:
continue
# Otherwise, put the item there or right after any duplicates.
while item == vector[ pos] :
pos += 1
vector[ pos] , item = item, vector[ pos]
writes += 1
# Rotate the rest of the cycle.
while pos != cycleStart:
# Find where to put the item.
pos = cycleStart
for item2 in vector[ cycleStart + 1 :] :
if item2 < item:
pos += 1
# Put the item there or right after any duplicates.
while item == vector[ pos] :
pos += 1
vector[ pos] , item = item, vector[ pos]
writes += 1
return writes
x = [ 0 , 1 , 2 , 2 , 2 , 2 , 1 , 9 , 3.5 , 5 , 8 , 4 , 7 , 0 , 6 ]
w = timeit .timeit ( cycleSort( x) , number = 10000 )
print w, x
aW1wb3J0IHRpbWVpdApkZWYgY3ljbGVTb3J0KHZlY3Rvcik6CiAgICB3cml0ZXMgPSAwCgogICAgIyBMb29wIHRocm91Z2ggdGhlIHZlY3RvciB0byBmaW5kIGN5Y2xlcyB0byByb3RhdGUuCiAgICBmb3IgY3ljbGVTdGFydCwgaXRlbSBpbiBlbnVtZXJhdGUodmVjdG9yKToKCiAgICAgICAgIyBGaW5kIHdoZXJlIHRvIHB1dCB0aGUgaXRlbS4KICAgICAgICBwb3MgPSBjeWNsZVN0YXJ0CiAgICAgICAgZm9yIGl0ZW0yIGluIHZlY3RvcltjeWNsZVN0YXJ0ICsgMTpdOgogICAgICAgICAgICBpZiBpdGVtMiA8IGl0ZW06CiAgICAgICAgICAgICAgICBwb3MgKz0gMQoKICAgICAgICAjIElmIHRoZSBpdGVtIGlzIGFscmVhZHkgdGhlcmUsIHRoaXMgaXMgbm90IGEgY3ljbGUuCiAgICAgICAgaWYgcG9zID09IGN5Y2xlU3RhcnQ6CiAgICAgICAgICAgIGNvbnRpbnVlCgogICAgICAgICMgT3RoZXJ3aXNlLCBwdXQgdGhlIGl0ZW0gdGhlcmUgb3IgcmlnaHQgYWZ0ZXIgYW55IGR1cGxpY2F0ZXMuCiAgICAgICAgd2hpbGUgaXRlbSA9PSB2ZWN0b3JbcG9zXToKICAgICAgICAgICAgcG9zICs9IDEKICAgICAgICB2ZWN0b3JbcG9zXSwgaXRlbSA9IGl0ZW0sIHZlY3Rvcltwb3NdCiAgICAgICAgd3JpdGVzICs9IDEKCiAgICAgICAgIyBSb3RhdGUgdGhlIHJlc3Qgb2YgdGhlIGN5Y2xlLgogICAgICAgIHdoaWxlIHBvcyAhPSBjeWNsZVN0YXJ0OgoKICAgICAgICAgICAgIyBGaW5kIHdoZXJlIHRvIHB1dCB0aGUgaXRlbS4KICAgICAgICAgICAgcG9zID0gY3ljbGVTdGFydAogICAgICAgICAgICBmb3IgaXRlbTIgaW4gdmVjdG9yW2N5Y2xlU3RhcnQgKyAxOl06CiAgICAgICAgICAgICAgICBpZiBpdGVtMiA8IGl0ZW06CiAgICAgICAgICAgICAgICAgICAgcG9zICs9IDEKCiAgICAgICAgICAgICMgUHV0IHRoZSBpdGVtIHRoZXJlIG9yIHJpZ2h0IGFmdGVyIGFueSBkdXBsaWNhdGVzLgogICAgICAgICAgICB3aGlsZSBpdGVtID09IHZlY3Rvcltwb3NdOgogICAgICAgICAgICAgICAgcG9zICs9IDEKICAgICAgICAgICAgdmVjdG9yW3Bvc10sIGl0ZW0gPSBpdGVtLCB2ZWN0b3JbcG9zXQogICAgICAgICAgICB3cml0ZXMgKz0gMQoKICAgIHJldHVybiB3cml0ZXMKCgp4ID0gWzAsIDEsIDIsIDIsIDIsIDIsIDEsIDksIDMuNSwgNSwgOCwgNCwgNywgMCwgNl0KdyA9IHRpbWVpdC50aW1laXQoY3ljbGVTb3J0KHgpLCBudW1iZXIgPSAxMDAwMCkgCnByaW50IHcsIHg=
stdout
stderr
Traceback (most recent call last):
File "prog.py", line 43, in <module>
File "/usr/lib/python2.7/timeit.py", line 237, in timeit
return Timer(stmt, setup, timer).timeit(number)
File "/usr/lib/python2.7/timeit.py", line 156, in __init__
raise ValueError("stmt is neither a string nor callable")
ValueError: stmt is neither a string nor callable