1. 堆排序
def heap_sort(li):
def _heapfly(li):
start = (len(li)) // 2 - 1 # 获取最后一个叶子节点的父节点
for nod in range(start, -1, -1):
left = 2 * nod + 1
right = min(left + 1, len(li) - 1)
temp = left if li[left] > li[right] else right
if li[temp] > li[nod]:
li[temp], li[nod] = li[nod], li[temp]
return li
result = []
for i in range(len(li)):
li = _heapfly(li)
result.append(li.pop(0))
return result
if __name__ == '__main__':
l = [3, 1, 4, 9, 6, 7, 5, 8, 2, 10, 14]
print(heap_sort(l))
归并排序
def merge_sort(li):
def _merge(a, b):
result = []
while a and b:
temp = a.pop(0) if a[0] < b[0] else b.pop(0)
result.append(temp)
result.extend(a if a else b)
return result
length = len(li)
if length == 1:
return li
else:
mid = int(length/2)
l = li[:mid]
r = li[mid:]
return _merge(merge_sort(l), merge_sort(r) )
if __name__ == '__main__':
print(merge_sort([1, 3, 5, 2, 7, 9, -1]))