#!/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)