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
Loading comments…