堆排序(python)实现

news/2024/5/19 5:47:29 标签: python, 排序算法, 堆排序
python">def MAX_Heapify(heap,HeapSize,root):#在堆中做结构调整使得父节点的值大于子节点

    left = 2*root + 1
    right = left + 1
    larger = root
    if left < HeapSize and heap[larger] < heap[left]:
        larger = left
    if right < HeapSize and heap[larger] < heap[right]:
        larger = right
    if larger != root:#如果做了堆调整则larger的值等于左节点或者右节点的,这个时候做对调值操作
        heap[larger],heap[root] = heap[root],heap[larger]
        MAX_Heapify(heap, HeapSize, larger)

def Build_MAX_Heap(heap):#构造一个堆,将堆中所有数据重新排序
    HeapSize = len(heap)#将堆的长度当独拿出来方便
    for i in range((HeapSize -2)//2,-1,-1):#从后往前出数
        MAX_Heapify(heap,HeapSize,i)

def HeapSort(heap):#将根节点取出与最后一位做对调,对前面len-1个节点继续进行对调整过程。
    Build_MAX_Heap(heap)
    for i in range(len(heap)-1,-1,-1):
        heap[0],heap[i] = heap[i],heap[0]
        MAX_Heapify(heap, i, 0)
    return heap

if __name__ == '__main__':
    print("堆排序:")
    a = [30,50,57,77,62,78,94,80,84]
    print("排序前:")
    print(a)
    HeapSort(a)
    print("排序后:")
    print(a)

运行结果:

python">堆排序:
排序前:
[30, 50, 57, 77, 62, 78, 94, 80, 84]
排序后:
[30, 50, 57, 62, 77, 78, 80, 84, 94]

其他排序算法可参考该文:python实现十大排序算法


http://www.niftyadmin.cn/n/1097225.html

相关文章

一步步学习SPD2010--第十一章节--处理母版页(11)--关键点

一步步学习SPD2010--第十一章节--处理母版页&#xff08;11&#xff09;--关键点 母版页给你的网站上的所有页面维持一致的外观。它们将内容页的内容和母版页的布局结合&#xff0c;允许相同的功能在网站许多页面间共享。母版页和一般页面拥有相同的基础架构&#xff0c;只是文…

总线宽度为32bit,时钟频率为200MHz,若总线上每5个时钟周期传送一个32bit的字,则该总线的带宽为 (4) MB/S。...

2015年上半年 网络工程师 上午试卷 综合知识 总线宽度为32bit&#xff0c;时钟频率为200MHz&#xff0c;若总线上每5个时钟周期传送一个32bit的字,则该总线的带宽为 (4) MB/S。 A.40B.80C.160D.200 解析&#xff1a; 总线上每5个时钟周期传送一个32bit的字&#xff0c;我们将…

KafkaServer启动流程分析

KafkaServer启动流程分析 根据kafka的Server启动命令&#xff0c;寻找到启动入口Kafka类的main方法。 bin/zookeeper-server-start.sh config/zookeeper.propertiesKafka类的main方法 def main(args: Array[String]): Unit {try {val serverProps getPropsFromArgs(args)va…

二叉排序树(二叉搜索树,二叉查找树)的(python)实现

二叉排序树&#xff0c;又叫做二叉搜索树或者二叉查找树&#xff0c;它具有以下性质&#xff1a; 若左子树不为空&#xff0c;则左子树上所有节点的值均小于或等于它的根节点的值。若右子树不为空&#xff0c;则右子树上所有节点的值均大于或等于它的根节点的值。左、右子树也…

电话线路使用的带通虑波器的宽带为3KHz (300~3300Hz),根据奈奎斯特采样定理,最小采样频率应为(16)。...

电话线路使用的带通虑波器的宽带为3KHz (300&#xff5e;3300Hz)&#xff0c;根据奈奎斯特采样定理&#xff0c;最小采样频率应为&#xff08;16&#xff09;。 A.300HzB.3300HzC.6000HzD.6600Hz 解析&#xff1a; 采样的频率决定了可恢复的模拟信号的质量。根据奈奎斯特采样定…

数据结构简述

文章目录数据结构概述栈队列链表单向链表双向链表循环链表散列表二叉排序树红黑树专栏导航数据结构概述 常用的数据结构有栈&#xff0c;队列&#xff0c;链表&#xff0c;二叉树&#xff0c;红黑树&#xff0c;散列表和位图。 数据结构优点缺点栈顶部元素的插入和取出快除了…

红黑树的(python)实现

由之前所说的二叉查找树可以看出&#xff0c;二叉查找树是在动态存储的过程中使得序列变成了有序序列&#xff0c;一旦有序之后&#xff0c;就方便我们进行各种操作。相对于无序数据而言&#xff0c;在我们分析数据和查找数据上都会带来很大的不便&#xff0c;所以我们需要先对…

安卓添加背景图片时解决图片拉伸问题

问题描述&#xff1a; 当我们在android layout布局文件设置背景图片只需要加上 android:background"drawable/ic_bg" 就可以了设置ic_bg为背景的图片了 然而这样设置后当图片较小时会发现 图片被拉伸了&#xff0c;失真。 解决方法 在drawable里建立一个repeat_bg.x…