排序算法:堆排序(Python)

思路:堆排序是指利用堆这种数据结构所设计的一种排序算法。堆积是一个近似完全二叉树的结构,即子结点的键值或索引总是小于(或者大于)它的父节点。将待排序的序列构造成一个最大堆,此时序列的最大值为根节点。依次将根节点与待排序序列的最后一个元素交换。再维护从根节点到该元素的前一个节点为最大堆,如此往复,最终得到一个递增序列。

一图解百惑,上图! 

排序算法:堆排序(Python)_第1张图片

话不多说,上代码!

def heapify(unsorted, index, heap_size):
        largest = index
        left_index = 2 * index + 1
        right_index = 2 * index + 2
        if left_index < heap_size and unsorted[left_index] > unsorted[largest]:
                largest = left_index
        if right_index < heap_size and unsorted[right_index] > unsorted[largest]:
                largest = right_index
        if largest != index:
                unsorted[largest], unsorted[index] = unsorted[index], unsorted[largest]
                heapify(unsorted, largest, heap_size)
def heap_sort(unsorted):
        n = len(unsorted)
        for i in range(n // 2 - 1, -1, -1):
                heapify(unsorted, i, n)
        for i in range(n - 1, 0, -1):
                unsorted[0], unsorted[i] = unsorted[i], unsorted[0]
                heapify(unsorted, 0, i)
        return unsorted

if __name__ == '__main__':
        test = [4,3,2,1]
        print(heap_sort(test))

总结

建堆-调堆-排序三步曲!

你可能感兴趣的:(排序算法,算法,数据结构)