各种排序

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()
原文地址:https://www.cnblogs.com/fenix/p/2531139.html