HeapSort

article/2025/10/25 0:37:41

堆的定义:

n个关键字序列K[1....n]称为堆,当且仅当改序列满足:

第一种为:小根堆:每个结点的值都小于或等于左右孩子结点

第二种为:大根堆:每个结点的值都大于或等于左右孩子结点

是一种完全二叉树。完全二叉树 是 一种除了最后一层之外的其他每一层都被完全填充,并且所有结点都保持向左对齐的树,向左对齐指的是:


堆排序:

堆排序的关键是构造初始堆。对初始序列构建堆,就是一个反复筛选的过程。

N个节点的完全二叉树,最后一个节点是第[N//2]个节点的孩子

对第[N//2]个节点为根的子树进行筛选(对于大根堆):若根节点的关键字小于左右子树中关键字的较大者,则交换,使该子树成为堆。

接着,由后向前依次对各节点([n//2]-1~1)为根的子树进行筛选,看该节点是否大于其左右子树的值,若不是,将左右子树节点中较大值与之交换。

代码:

import randomdef sift(data, root, end):#temp = rootwhile True:max_child = root * 2 +1                             #最大子树索引先赋给左子树if max_child > end:breakif max_child+1 <= end and data[max_child] < data[max_child+1]:   #右子树的关键字大于左子树max_child += 1                                              #最大子树索引赋给右子树if data[root] < data[max_child]:                                #最大子树的关键字大于根节点data[root], data[max_child] = data[max_child], data[root]   #交换这两个数root = max_child                                            #修改根节点的索引else:breakdef heap_sort(data):n = len(data)#创建大根堆for root in range(n//2,-1,-1):sift(data,root,n-1)#堆排序,堆顶元素和堆末尾的元素交换,然后把剩下的元素调整为一个大根堆for end in range(n-1, -1, -1):data[0], data[end] = data[end], data[0]sift(data,0,end-1)if __name__ == "__main__":li = list(range(10))random.shuffle(li)print(li)heap_sort(li)print(li)

 


http://chatgpt.dhexx.cn/article/Nl46mkTC.shtml

相关文章

heap.h

上一篇写了写链表&#xff0c;这篇写下堆&#xff0c;这个结构接触的不多&#xff0c;所以正好学习一下libhv中的堆&#xff0c;这个堆的实现比较灵活&#xff0c;即可以是大顶堆也可以是小顶堆&#xff0c;通过比较函数是比大还是比小来区别&#xff0c;当然&#xff0c;如果没…

部署 heapster 插件

说明&#xff1a;本部署文章参照了 https://github.com/opsnull/follow-me-install-kubernetes-cluster &#xff0c;欢迎给作者star Heapster是一个收集者&#xff0c;将每个Node上的cAdvisor的数据进行汇总&#xff0c;然后导到第三方工具(如InfluxDB)。 Heapster 是通过调用…

每天5分钟玩转Kubernetes | Heapster

书籍来源&#xff1a;cloudman《每天5分钟玩转Kubernetes》 一边学习一边整理老师的课程内容及试验笔记&#xff0c;并与大家分享&#xff0c;侵权即删&#xff0c;谢谢支持&#xff01; 附上汇总贴&#xff1a;每天5分钟玩转Kubernetes | 汇总_COCOgsta的博客-CSDN博客 Heap…

Kubernetes监控Heapster介绍

什么是Heapster&#xff1f; Heapster是容器集群监控和性能分析工具&#xff0c;天然的支持Kubernetes和CoreOS。 Kubernetes有个出名的监控agent—cAdvisor。在每个kubernetes Node上都会运行cAdvisor&#xff0c;它会收集本机以及容器的监控数据(cpu,memory,filesystem,netw…

nginx部署https域名

目录 一、准备工作 二、部署项目 三、修改nginx的配置文件 一、准备工作 1、首先你要有一台服务器&#xff0c;本篇文章是创建在腾讯云服务器的基础上的&#xff0c;仅供参考 2、在服务器上注册域名&#xff0c;这个域名注册等待审核时间较长&#xff0c;建议提早注册&…

域名解析与nginx配置

dns解析 阿里云服务器dns域名解析配置&#xff0c;记录值就是阿里云服务器的ip nginx配置 远程到阿里云服务器上对nginx进行配置&#xff1a; nginx反向代理配置&#xff1a; 修改配置后&#xff0c;重启nginx服务 进入目录&#xff1a;cd /usr/sbin 强制杀死进程&#xff…

linux nginx部署项目配置域名

一.把项目打包&#xff08;jar&#xff09; 二.把jar包通过xshell上传 三.编辑nginx.conf文件&#xff0c;配置域名&#xff0c;每配置一个域名就复制一份里面的server 1 代表你所要配置的域名 2 代表你项目浏览器访问路径 四.在项目上传的目录下&#xff08;jar包所放的位…

Docker部署nginx、配置域名

文章目录 背景1. 拉取nginx镜像2. 启动nginx3. 通过docker修改nginx配置1) 挂载配置文件2) 重新加载配置文件 4. 配置我的域名小结 背景 docker 容器相关技术已经成为了现在开发和运维人员的热门技术之一&#xff0c;docker就像一个集装箱能够将各种应用放入到集装箱里的盒子里…

nginx配置域名访问/禁止ip访问

一 背景 为什么要禁止ip访问? 为了避免其他人把未备案的域名解析到自己的服务器IP&#xff0c;而导致服务器被断网&#xff0c;我们可以通过禁止使用ip访问的方法&#xff0c;防止此类事情的发生。 二 解决方法 修改配置文件nginx.conf, 其中2.2的方法可以参考 ubuntu18.04…

配置nginx域名转发

这应该是&#xff0c;我在这个网站的最后一篇博客了。 国庆的时候不知道为什么突然买了个服务器&#xff0c;我打算自己建一个博客网站了&#xff0c;然后前两天域名刚备案成功&#xff0c;晚上有空就配置服务器。 服务器先安装jdk&#xff0c;jre基础环境&#xff0c;然后ngi…

Nginx 服务器配置域名证书

1、首先去申请域名证书&#xff0c;或者购买。都可以&#xff0c;腾讯、阿里、华为、均可&#xff0c;最好域名跟证书在一个服务商处。 2、申请好域名后&#xff0c;进行域名解析配置。证书方会让你&#xff0c;添加提供的解析内容。 3、下载证书&#xff0c;证书提供商会提供…

【Nginx】Nginx主机域名配置

一、配置多个端口访问不同文件 相同域名&#xff0c;不同端口&#xff0c;不同文件 #两个不同文件夹&#xff0c;分别存放不同文件 [rootnginx ~]# mkdir /www/work_01 -p [rootnginx ~]# mkdir /www/work_02 [rootnginx ~]# vim /www/work_01/index.html this is work_01! [r…

阿里云ECS部署Nginx配置域名访问

目录 前言环境 具体步骤服务器域名SSL证书Nginx配置 前言 记录下阿里云服务器建站的过程&#xff08;回回建&#xff0c;回回忘&#xff0c;尴尬。。。&#xff09; 环境 ECS&#xff08;Centos7.6&#xff09; Nginx 具体步骤 服务器 首先&#xff0c;需要购买一台服务器 …

Nginx配置域名服务小试牛刀

最近实际操作的一个项目哦&#xff0c;大家看下有没有帮助哦&#xff01;Nginx 配置通过域名访问项目&#xff01; 项目目的&#xff1a;将打包好的项目jar文件部署起来&#xff0c;并能够通过域名访问 准备条件&#xff1a; 1.服务器端安装需要的1.jdk 选择1.8版本 Linux…

nginx 配置域名映射到本地IP

需求背景 项目需求需要在不同的域名下&#xff0c;判断展示不同的内容&#xff0c;为了模拟线上的正式域名&#xff0c;有以下几种方案&#xff1a; 方案一&#xff1a; 配置host: 1、找到host的文件地址&#xff08;不会的百度&#xff09; 2、配置host: 127.0.0.1 www.t…

nginx配置域名,不要端口

版权声明&#xff1a;本文为博主转载文章&#xff0c;遵循 CC 4.0 BY-SA 版权协议&#xff0c;转载请附上原文出处链接和本声明。 本文链接&#xff1a; https://blog.csdn.net/panshoujia/article/details/91411484 前期在腾讯云上购买了域名&#xff0c;并在域名管理中&…

服务器部署nginx配置域名反向代理

下载最新版Nginx镜像 docker pull nginx:latest运行nginx镜像 docker run -p 80:80 --name nginx -d nginx从nginx容器中映射核心文件 1、本地创建文件目录 mkdir -p /opt/docker/nginx/conf.d mkdir -p /opt/docker/nginx/html mkdir -p /opt/docker/nginx/logs mkdir -p …

Nginx配置二级域名的方法分享

本文主要介绍了Nginx配置二级域名的方法实现&#xff0c;文中通过示例代码介绍的非常详细&#xff0c;对大家的学习或者工作具有一定的参考学习价值&#xff0c;需要的朋友们下面随着微点阅读小编来一起学习学习吧 当一个域名需要使用在两个项目上后&#xff0c;我们就需要使用…

nginx配置域名访问

1. 本地开发好的demo程序&#xff0c;target目录下&#xff0c;把META-INF 、WEB-INF、index.jsp 所有文件打成zip包&#xff0c;如下图&#xff1a; 2. Linux服务器下&#xff0c;部署到Tomcat下&#xff0c;清空ROOT目录下所有文件&#xff0c;把1中nginx.zip文件放到ROOT目…

Nginx虚拟域名配置

Linux下Nginx虚拟域名配置 (一)编辑sudo vim /usr/local/nginx/conf/nginx.conf 1.于http内增加include vhost/*.conf 2.保存退出(:wq) (二)在/usr/local/nginx/conf/目录下新建vhost文件夹(/usr/local/nginx/conf/vhost) mkdir /usr/local/nginx/conf/vhost (三)创建域名转发配…