"""堆排序"""def max_heapify(heap,heapSize,root): # 调整列表中的元素并保证以root为根的堆是一个大根堆 ''' 给定某个节点的下标root,这个节点的父节点、左子节点、右子节点的下标都可以被计算出来。 父节点:(root-1)//2 左子节点:2*root + 1 右子节点:2*root + 2 即:左子节点 + 1 '''
left = 2*root + 1
right = left + 1
larger = rootif left < heapSize and heap[larger] < heap[left]:
larger = leftif right < heapSize and heap[larger] < heap[right]:
larger = rightif 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)import randomdef heap_sort(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)# 测试if __name__ == '__main__':
a = [30, 50, 57, 77, 62, 78, 94, 80, 84]
print(a)
heap_sort(a)
print(a)
b = [random.randint(1,100) for i in range(100)]
print(b)
heap_sort(b)
print(b)

vector 对某个下标排序_Python实现堆排序相关推荐

  1. C语言——十四种内部排序算法【直接插入排序-冒泡排序-选择排序-插入排序-希尔排序-归并排序-快速排序-堆排序-折半插入排序-二分查找-路插入排序-表插入排序-简单选择排序-直接选择排序-树形选择】

    目录: 一:插入排序 A:直接插入排序 1.定义: 2.算法演示 实例1: 3.基本思想 4.排序流程图 实例1: B:希尔排序 1.定义: 2.算法演示 实例2: C:其他插入排序 a:折半插入排序 ...

  2. python实现排序_python实现以及所有排序大总结【转】

    原址 一.概述 排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存. 我们这里说说八大排序就是内部排序. ...

  3. 十大排序算法之堆排序

    十大排序算法之堆排序 本文采用Java书写选择排序,其他语言类似可以借鉴着写 思想:所谓堆排序就是通过构造最大堆(升序)或者最小堆(降序)来进行排列的方法.可能有些童鞋不知道何为最大堆,何为最小堆.这 ...

  4. 排序算法:堆排序算法实现及分析

    堆排序介绍 堆排序(Heap Sort)就来利用堆(假设利用大顶堆)进行排序的方法.它的基本思想是,将待排序的序列构成一个大顶堆.此时,整个序列的最大值就是堆顶的根结点.将它移走(其实就是将其与堆数组 ...

  5. c++ sort 从大到小排序_C语言必学的12个排序算法:堆排序(第7篇)

    题外话堆排序比之前的简单选择.冒泡算法.快速排序算法复杂一些,因为用到了树形数据结构,但是本文使用了数组实现完全二叉树,因此也比较简单.C语言初学者,可以简单了解其思想,具体的知识掌握可以参照数据结构 ...

  6. 数据结构与算法:十大排序算法之堆排序

    数据结构与算法:十大排序算法之堆排序 堆排序可以说是选择排序的优化 package TopTenSortingAlgorithms;import java.util.Arrays; import ja ...

  7. 排序算法(6)堆排序

    排序算法(6)堆排序---选择排序的高级版 思想:利用数据结构堆的思想来排序,堆排序利用了大堆(或小堆)堆顶记录的关键字最大(或最小)这一特征,使得当前无序的序列中选择关键最大(或最小)的记录变得简单 ...

  8. Java常见排序算法之堆排序

    在学习算法的过程中,我们难免会接触很多和排序相关的算法.总而言之,对于任何编程人员来说,基本的排序算法是必须要掌握的. 从今天开始,我们将要进行基本的排序算法的讲解.Are you ready?Let ...

  9. 排序算法之---堆排序(很重要的一个结构,新手入门必备)

    排序算法之---堆排序(很重要的一个结构,新手入门必备) 先来简单的介绍一下堆结构: 堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均为O(nlo ...

最新文章

  1. mysql-5.7.24-winx64忘记密码该咋解决
  2. python3精要(42)-异步生成器
  3. 工具SSHSecure连接远程服务器步骤
  4. git 安装目录与服务的暂停与启动
  5. IOS15打包静态库
  6. 第一次使用 Blog
  7. scala 环境变量_Scala变量的范围
  8. 数据结构pta选择判断复习
  9. 【kafka】JMX 监控kafka FINER RMI TCP getConnectionId IOException
  10. 华为linux系统怎么安装爱奇艺,荣耀智慧屏X1怎么安装爱奇艺?怎么安装第三方软件?很简单...
  11. Windows-查看系统安装时间、启停某服务、组策略、限制外部设备命令
  12. VMwar配置静态ip
  13. 应用程序虚拟化,序列化实验 Microsoft Desktop Optimization Pack 实现一个应用程
  14. java 配置dbcp_java – 使用DBCP进行Tomcat配置
  15. springmvc源码-参数解析
  16. Python3 微信支付(小程序支付)V3接口
  17. wMy_Python ~储存相关~
  18. 软件在环测试 Software in-The-Loop Test
  19. 腾讯云CentOS7 LAMP(linux的apache MariaDB php)yum方式部署
  20. 物联网云平台应用于远程空气污染监控

热门文章

  1. 润乾报表配置mysql数据源_润乾报表在proxool应用下的数据源配置
  2. android 驻留广播,Android实现Service永久驻留
  3. ubuntu makefile交叉编译报错:file not recognized: file format not recognized
  4. python报错:float object is not callable
  5. Dex-net再次复现
  6. 插值法补齐缺失数据_关于数据清洗的常见方式
  7. stm32 ucosii消息队列 串口_正点原子STM32F407探索者开发板资料连载第六十三章 UCOSII 实验...
  8. Linux CenOS7下安装ActivetMQ
  9. oracle一行变一列,oracle多行变一行
  10. java中完成md5加密解密_java实现md5加密解密 notNET中加密和解密的实现方法