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


本文摘自php中文网,作者不言,侵删。

本篇文章给大家带来的内容是关于python如何实现堆排序(代码示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

堆排序

堆排序(Heapsort)是指利用堆这种数据结构所设计的一种排序算法。堆积是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点(但是不保证所有左子树比右子树小反之亦然)。堆排序可以说是一种利用堆的概念来排序的选择排序。分为两种方法:

大顶堆:每个节点的值都大于或等于其子节点的值,在堆排序算法中用于升序排列;

小顶堆:每个节点的值都小于或等于其子节点的值,在堆排序算法中用于降序排列;

堆排序的平均时间复杂度为 Ο(nlogn)。

算法步骤

1、创建一个堆 H[0……n-1];(**对非叶子节点的子节点进行调节,构建堆**)

2、把堆首(最大值)和堆尾互换;

3、把堆的尺寸缩小 1,并调用 shift_down(0),目的是把新的数组顶端数据调整到相应位置;

4、重复步骤 2,直到堆的尺寸为 1。

Python 代码实现

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

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如何实现堆排序(代码示例)的详细内容,更多文章请关注木庄网络博客!!

相关阅读 >>

Python for循环语句怎么写

Python中你必须了解的知识

Python如何合并两个字典?(代码示例)

Python如何实现单例模式

深入类的属性介绍与使用

Python安装matplotlib失败怎么解决

[译]the Python tutorial#input and output

Python os.close() 方法是什么?os.close能做到什么?

Python怎么读取txt文件

Python数据分析与应用是什么

更多相关阅读请进入《Python》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...