首页 > 编程知识 正文

python算法详解(堆排序python理解)

时间:2023-05-05 01:10:56 阅读:98459 作者:1185

00-1010 Heapsort是指利用堆的数据结构设计的一种排序算法。

堆叠是一种近乎完整的二叉树结构,同时满足堆叠的性质:即子节点的键值或索引始终小于(或大于)其父节点。堆排序可以说是一种利用堆的概念进行排序的选择性排序。

简介

堆:一种特殊的完全二叉树结构根堆:完全二叉树,满足任意节点大于其子节点;一个完整的二叉树,它满足任何节点都小于它的子节点

00-1010这里我们用维基的定义来说明:

通常堆是通过一维数组实现的。在阵列开始位置为0的情况下

父节点I的左子节点在位置:(2 * I ^ 1);

父节点I的右子节点在位置:(2 * I ^ 2);

子节点I的父节点在位置:(I-1)//2;

00-1010建桩:将待整理的序列建成桩h [0.n-1],并从最后一个非叶节点开始从左到右、从下到上进行调整。根据上升或下降需求选择大或小的顶桩;此时,堆的顶部元素是最大或最小的元素;交换堆的顶元素和尾元素,调整堆,使堆再次有序;这时,顶部元素是第二大元素;重复以上步骤,直到堆为空。

特点

堆排序节点访问

####

#今日头条:技术好奇心

####

#建立维护堆

def heapify(arr,n,i):

#最大位置

最大=i

#左=2*i 1

l=2 * i 1

#右=2*i 2

r=2 * i 2

#比较父节点和左子节点的大小

如果l n和arr[i] arr[l]:

最大=l

#将右边的子节点与当前的大节点值进行比较。

#(可能是父亲,也可能是目前剩下的孩子)

如果r n和arr[最大] arr[r]:

最大=r

#检查上一步得到的最大值是否是上面最初定义的父节点。

#如果不是,交换和递归。

如果最大!=i:

#交易所

arr[i],arr[最大]

#递归调整子树

heapify(arr,n,最大)

#堆排序

def堆排序(arr):

#数组长度

n=len(arr)

#建立一个大的顶堆,从下往上,所以用-1。

对于范围(n,-1,-1):中的I

健康(arr,n,I)

Print(' -构造后数组的内容)

打印(arr)

#逐个交换元素

对于范围(n - 1,0,-1):中的I

#交易所

arr[i],arr[0]=arr[0],arr[i]

#维护交换的堆

heapify(arr,I,0)

if __name__=='__main__':

印刷版(《今日头条:技术好奇心》)

打印('-排序前的数组内容)

arr=[2,7,26,25,19,17,1,90,3,36]

打印(arr)

堆排序(arr)

打印('-排序后的结果)

打印(arr)运行结果:

今日头条:技术好奇心

-排序前数组的内容-。

[2, 7, 26, 25, 19, 17, 1, 90, 3, 36]

-排序后的结果-。

[1, 2, 3, 7, 17, 19, 25, 26, 36, 90]

执行步骤

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。