import random import datetime import copy def bubbleSort(data): l1 = len(data)-1 for i in xrange(l1,0,-1): for j in xrange(i): if(data[j]>data[j+1]): data[j],data[j+1] = data[j+1],data[j] def selectionSort(data): l = len(data) l1 = l-1 for i in xrange(l1): k,min = i,data[i] for j in xrange(i,l): if(data[j]<min): k,min = j,data[j] if(i<>k): data[i],data[k] = data[k],data[i] def insertSort(data): l = len(data) l1 = l-1 for i in xrange(1,l): j = i-1 temp = data[i] while(j>=0 and data[j]>temp): data[j+1] = data[j] j = j-1 if(j<>i-1): data[j+1] = temp def shellSort(data,n=None): l = len(data) if(n==None): n = l /2 if(n%2==0): n = n+1 for i in xrange(n): newdata = data[i:len(data):n] insertSort(newdata) data[i:len(data):n] = newdata d = n/2 if(d>0): if(d%2==0): d = d+1 shellSort(data,d) def quickSort(data,low=0,high=None): if(high==None): high = len(data) - 1 if(low<high): i,j,key = low,high,data[low] while(i<j): while(i<j and data[j]>key): j = j-1 if(i<j): data[i] = data[j] i = i+1 while(i<j and data[i]<key): i = i+1 if(i<j): data[j] = data[i] j = j-1 data[i] = key quickSort(data,low,i-1) quickSort(data,i+1,high) data = [random.randint(0,65536) for i in xrange(1000)] def sortPerform(sortFunc): newdata = copy.deepcopy(data) t1 = datetime.datetime.now() sortFunc(newdata) t2 = datetime.datetime.now() if(len(newdata)<50): print newdata print(sortFunc.__name__+":"+str(t2-t1)) sortPerform(quickSort) sortPerform(bubbleSort) sortPerform(shellSort) sortPerform(selectionSort) sortPerform(insertSort) raw_input()