数据结构与算法(四) --- 排序

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]))

猜你喜欢

转载自www.cnblogs.com/geoffreyone/p/11655212.html