算法之堆排序

       堆排序是一种基于比较的排序算法,通过构建二叉堆(Binary Heap),可以利用堆的性质进行高效的排序。二叉堆是一个完全二叉树,可以有最大堆和最小堆两种形式。在最大堆中,父节点的值总是大于或等于其子节点的值;在最小堆中,父节点的值总是小于或等于其子节点的值。

先了解原理 

       在最大堆中,每次操作都会选出当前堆中的最大元素。这个元素被放置到堆的顶部,然后与数组的最后一个元素交换位置。交换后,该元素从堆中移除,因为它已经被放置在其最终位置。接下来,我们重新调整剩余的堆结构,以确保堆的最大元素位于顶部,为下一次操作做准备。通过不断重复这个过程,我们能够逐步构建出一个有序的数组。同理,小堆也是一样的

当然实际编程的时候要考虑式子

R[V]>=R[2V]  , R[V]>=R[2V+1]

咱们话不多说直接看题吧。

看题的时候先思考参数,v代表什么,n代表什么?v是根节点编号,n是堆的元素数。

i=v,都是根节点编号,R[0]=R[i],就是将根节点存到R[0]。根据式子R[V]>=R[2V]  , R[V]>=R[2V+1]

所以可以知道j=2*i   是出于什么目的了吧。

然后就是if判断j<=n应该很容易理解吧,因为n是总的堆的数目,j肯定要小于或者等于n的

至于那个if(j<n&&R[j]<R[j+1])  j++

这个很好理解,就是简单的将下面节点最大的用j表示,怎么说呢,就是你想想一颗二叉树,左节点是3,而右节点是4,而大堆肯定是选大的和根节点比较。所以才有这个if判断,如果右节点大,就让这个j++,让它指向右节点

然后就是那个空,明显是R[j] >=R[0]   ,因为前面已经将R[0]=R[i],所以这里和R[0]进行比较就行了。

然后第二个空,肯定是构建大堆呗,Heapify(R,i,n),第三个空 i>1或i>=2,第四个空是R[1]=R[0]。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/15558.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

UIKit之猜图器Demo

需求 实现猜图器Demo 功能分解&#xff1a; 1>下一题切换功能 2>点击图片后能放大并背景变暗&#xff08;本质是透明度的变化&#xff09;。再次点击则缩小&#xff0c;删除暗色背景。 3> 答案区按钮点击则文字消失&#xff0c;选择区对应文字恢复。 4> 选择区…

springboot项目,@Test写法 @Before @After

某文件示例 package cn.xxx.crm.boss;import cn.xxxx.crm.manager.mq.rabbit.AliyunCredentialsProvider; import com.rabbitmq.client.AMQP; import com.rabbitmq.client.Channel; import com.rabbitmq.client.Connection; import com.rabbitmq.client.ConnectionFactory; im…

第十九届全国环境友好科技竞赛(绿色创业类)正式启动

近日&#xff0c;第十九届全国环境友好科技竞赛&#xff08;绿色创业类&#xff09;正式拉开帷幕。本次竞赛由清华大学、同济大学、西安建筑科技大学及中国环境科学学会共同主办&#xff0c;旨在通过学科竞赛的方式鼓励全国高校学生积极参与到资源节约型和环境友好型的和谐社会…

探索python字典:遍历与访问的艺术

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 一、获取字典的键与值 1. 获取字典的键 2. 获取字典的值 二、遍历字典的键值对 1. 使用 …

2146. 【2017.6.17普及组模拟】小明解密码

题目描述 “天阶夜色凉如水,卧看牵牛织女星。” 小明是一个喜爱幻想的孩子。每天晚上&#xff0c;他都会静静地躺在家门前的草地上&#xff0c;抬头仰望天空&#xff0c;幻想着天上星星的故事&#xff0c;天空中&#xff0c;数颗星星一闪一闪地眨着眼睛&#xff0c;好像…

mybatis plus使用 (基本使用 生成器 逻辑删除等)

Mybatis plus 先查询再根据查询结果判断是否插入&#xff0c;并发情况下出现重复数据 解决&#xff1a;1、java代码中加同步代码块或加锁(保证查询、插入是一个原子性操作) 2、直接在数据库设置唯一键&#xff0c;java中无需先查询判断。捕获唯一键异常&#xff1a;org.spri…

【全开源】二手车置换平台系统小程序(FastAdmin+ThinkPHP+Uniapp)

二手车置换平台系统 特色功能&#xff1a; 车辆评估&#xff1a;系统提供车辆状况、性能和价值的评估功能&#xff0c;通过拍照、上传图片等方式自动识别车辆信息并给出估价建议&#xff0c;帮助买家和卖家更准确地了解车辆价值。 在线交易&#xff1a;平台提供在线购车、售车…

Idea中flume的Interceptor的编写教程

1.新建-项目-新建项目 注意位置是将来打包文件存放的位置&#xff0c;即我们打包好的文件在这/export/data个目录下寻找 2. 在maven项目中导入依赖 Pom.xml文件中写入 <dependencies> <dependency> <groupId>org.apache.flume</groupId> <artifa…

【C#实战】Newtonsoft.Json基类子类解析

情景再现 假设你有如下类&#xff1a; public class Item {public int Id;public string Name; }public class Weapon: Item {public int CurrentAmmo; }public class Inventory {public List<Item> Items; } 其中你序列化的是Inventory类&#xff0c;Items列表里混杂着…

❤Element的使用element

❤Element的使用 1、input输入框 禁止自动补全和下拉提示 input 输入框在输入后浏览器会记录用户输入的值&#xff0c;在下次输入的时候会将记录的值提示在输入框的下面&#xff0c;当输入框是密码的时候&#xff0c;这样可以看见上次输入的密码&#xff0c;这样用户体验不好…

python使用jsonpath来查找key并赋值

目录 一、引言 二、JsonPath简介 三、Python中的JsonPath库 四、使用JsonPath查找JSON Key 五、使用JsonPath赋值JSON Key 六、高级用法 七、结论 一、引言 在数据驱动的现代应用中&#xff0c;JSON&#xff08;JavaScript Object Notation&#xff09;已成为一种广泛使…

Java 微信小程序登录(openId方式)

1 需求 在开发微信小程序项目时&#xff0c;登录采用的是openId方式&#xff0c;这是一种用户无感的登录方式&#xff0c;用户点开微信小程序时&#xff0c;去调用后端的登录接口。 核心代码 Slf4j Component public class WeChatUtil {private static final String …

基于大数据的支付风险智能防控技术规范

随着大数据、移动互联、人工智能、生物特征识别等技术的快速发展&#xff0c;支付方式正在发生着巨大而深刻的变革&#xff0c;新技术在丰富支付手段、提高支付效率的同时&#xff0c;带来了新的隐患&#xff0c;也对从业机构的风险防控能力提出了更高的要求。 传统的风控技术…

springboot利用Spring的自动装配,策略模式提高系统接口扩展能力,

前段时间有个简单的短信登录功能&#xff0c;需要集成短信服务实现短信发送&#xff0c;一开始用的阿里云&#xff0c;后面领导又说用天翼云&#xff0c;还说阿里云的保留&#xff0c;以后说不准还会集成其他的服务商&#xff0c;于是用nacos的热更新来解决动态切换&#xff0c…

unity InputField的问题

unity 的inputField当focus时&#xff0c;弹起来的键盘样式会携带有一个输入显示。如果想自定义输入框的样式&#xff0c;就需要关闭inputfield的activateInput就是激发输入框的显示然后当inputfield被点击的时候&#xff0c;调用android原生键盘&#xff0c;并设置内容回调。我…

01-02.Vue的常用指令(二)

01-02.Vue的常用指令&#xff08;二&#xff09; 前言v-model&#xff1a;双向数据绑定v-model举例&#xff1a;实现简易计算器Vue中通过属性绑定为元素设置class 类样式引入方式一&#xff1a;数组写法二&#xff1a;在数组中使用三元表达式写法三&#xff1a;在数组中使用 对…

【全部更新完毕】2024电工杯B题详细思路代码成品文章教学:大学生平衡膳食食谱的优化设计及评价

大学生平衡膳食食谱的优化设计及评价 摘要 大学阶段是学生获取知识和身体发育的关键时期&#xff0c;也是形成良好饮食习惯的重要阶段。然而&#xff0c;当前大学生中存在饮食结构不合理和不良饮食习惯的问题&#xff0c;主要表现为不吃早餐或早餐吃得马虎&#xff0c;经常食用…

CentOS 常见命令详解

CentOS 是一种基于 Red Hat Enterprise Linux (RHEL) 的免费开源操作系统&#xff0c;以其稳定性和高效性广泛应用于服务器和企业环境中。对于系统管理员和开发人员来说&#xff0c;掌握 CentOS 的常见命令是日常工作中的必备技能。本文将详细介绍一些在 CentOS 上常用的命令&a…

算法提高之谜一样的牛

算法提高之谜一样的牛 核心思想&#xff1a;树状数组 初始化树状数组为1 表示所有高度都没有用过从后往前遍历h数组 分析身高 取当前h&#xff0c;即前面有h个比它高的 所以它是第h1个数求当前身高中 第h1个数 用二分mid求sum找到第k个数当前身高用过之后减1 #include <i…

高通Android 12/13冻结应用

最近开发SDK遇到冻结应用需求&#xff0c;于是简单记录下。总体而言比较简单&#xff0c;调用系统接口实现此功能。 涉及类与方法 IPackageManager .aidl # * As per {link android.content.pm.PackageManager#setApplicationEnabledSetting}.*/UnsupportedAppUsagevoid setA…