您好,欢迎访问一九零五行业门户网

python如何实现堆排序(代码示例)

本篇文章给大家带来的内容是关于python如何实现堆排序(代码示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。
堆排序
堆排序(heapsort)是指利用堆这种数据结构所设计的一种排序算法。堆积是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点(但是不保证所有左子树比右子树小反之亦然)。堆排序可以说是一种利用堆的概念来排序的选择排序。分为两种方法:
大顶堆:每个节点的值都大于或等于其子节点的值,在堆排序算法中用于升序排列;
小顶堆:每个节点的值都小于或等于其子节点的值,在堆排序算法中用于降序排列;
堆排序的平均时间复杂度为 ο(nlogn)。
算法步骤
1、创建一个堆 h[0……n-1];(**对非叶子节点的子节点进行调节,构建堆**)
2、把堆首(最大值)和堆尾互换;
3、把堆的尺寸缩小 1,并调用 shift_down(0),目的是把新的数组顶端数据调整到相应位置;
4、重复步骤 2,直到堆的尺寸为 1。
python 代码实现def buildmaxheap(arr):    import math    for i in range(math.floor(len(arr)/2),-1,-1):#构建堆由下往上构建所以用-1        heapify(arr,i)def heapify(arr, i):    left = 2*i+1    right = 2*i+2    largest = i    if left < arrlen and arr[left] > arr[largest]:        largest = left    if right < arrlen and arr[right] > arr[largest]:        largest = right    if largest != i:        swap(arr, i, largest)        heapify(arr, largest)def swap(arr, i, j):    arr[i], arr[j] = arr[j], arr[i]def heapsort(arr):    global arrlen    arrlen = len(arr)    buildmaxheap(arr)    for i in range(len(arr)-1,0,-1):        swap(arr,0,i)        arrlen -=1 #每次踢掉求出的最大值        heapify(arr, 0)    return arr
以上就是python如何实现堆排序(代码示例)的详细内容。
其它类似信息

推荐信息