冒泡,快排,堆排序

#!/usr/bin/env python
# _*_ coding:utf-8 _*_
__author__ = "ligq"
import time
import random
import copy
import sys

def cal_time(func):
    def wrapper(*args, **kwargs):
        t1 = time.time()
        result = func(*args, **kwargs)
        t2 = time.time()
        print("%s running time: %s secs." % (func.__name__, t2 - t1))
        return result
    return wrapper


#构造堆
def sift(data,low ,high):
    i = low
    j = 2 * i + 1
    tmp = data[i]
    while j <= high:
        if j+1 <= high and data[j] < data[j +1]:
            j += 1
        if data[j] >tmp:
            data[i] = data[j]
            i = j
            j = 2*i+1
        else:
            break
    data[i]=tmp

#堆排序
@cal_time
def heap_sort(data):
    n = len(data)
    for i in range (n // 2 -1,-1,-1):
        sift(data,i ,i -1)
    for i in range(n-1,-1,-1):
        data[0],data[i] = data[i],data[0]
        sift(data,0,i-1)


#冒泡排序
@cal_time
def bubble_sort(data):
    for i in range(len(li)-1):
        exchange = False
        for j in range(len(li) - i- 1):
            if li[j] > li [j+1]:
                li[j],li[j+1] = li[j+1],li[j]
                exchange =True
        if not exchange:
            break





li = list(range(100))

# random.shuffle(li)
print(li)
bubble_sort(li)
print(li)
# random.shuffle(li)
print(li)
heap_sort(li)
print(li)
原文地址:https://www.cnblogs.com/noube/p/6564937.html