A sorting algorithm written in python which is sometimes fast
from datetime import datetime
# seed
x_last = datetime.now().microsecond
def rand_no(mx):
global x_last
x = ((16807 * x_last) % (2**31 - 1))
x_last = x
return x % (mx+1)
def is_sorted(k):
for i in range(len(k)-1):
if k[i] > k[i+1]:
return False
return True
def mix(k):
for i in range(len(k)):
n = rand_no(len(k)-1)
m = rand_no(len(k)-1)
k[n], k[m] = k[m], k[n]
def rand_sort(k):
while not is_sorted(k):
mix(k)
if __name__ == '__main__':
# test
k = [1,3,1]; print k; rand_sort(k); print k, '\n'
k = [2,5,3,12,54,2,3]; print k; rand_sort(k); print k, '\n'
k = [0,2,0,-3,7,2.1,17,56,45]; print k; rand_sort(k); print k, '\n'
k = [-7.4,23,-4,-3,4.02,5.6,-10,800,-1.1]; print k; rand_sort(k); print k, '\n'
k = [0.1,-0.8,2.3,-3.7,7.5,-2.1,-1.7,5.6,4.5]; print k; rand_sort(k); print k, '\n'
Posted Apr 13, 2013, 11:22 PM UTC
2110