C++之堆排

news2025/1/11 4:06:30

 

堆排的原理和结构:

堆排序是一种常见的排序算法,基于堆这种数据结构实现。堆是一种特殊的树形数据结构,它满足以下两个条件:
堆是一棵完全二叉树。
堆的任意节点的值,都必须大于等于(或小于等于)左右子节点的值。
根据这些定义,我们可以将堆分为两种类型:最大堆和最小堆。
最大堆:根节点的值最大,任意节点的值都大于等于其左右子节点的值。
最小堆:根节点的值最小,任意节点的值都小于等于其左右子节点的值。
堆排序分为两个步骤:建堆和排序。
建堆:将待排序元素序列构建为一个堆。具体操作是从后往前遍历所有非叶子节点,逐个调整节点的值,使得它成为一个符合堆的定义的结构。建堆操作时间复杂度为O(n)。
排序:将堆中的元素依次取出,形成有序序列。具体的操作是,将堆顶元素(最大值或最小值)与堆底元素交换,然后将剩余元素重新构建堆。排序操作时间复杂度为O(n*log n)。
因此,堆排序的时间复杂度为O(n*log n),是一种不稳定的排序算法。

data++是什么意思(data)是一个数组?

data++是C语言中的一个表达式,它会将指针data指向的地址向后移动一个存储单位的距离,这里一个存储单位指的是数组的元素大小。如果data是一个数组名,则它代表数组的首元素的地址。

例如,如果data是一个int类型的数组,其大小为 4 字节,那么 data++ 表示将指针data向右移动 4 字节,指向数组中下一个元素的地址。

需要注意的是,由于data是一个指向数组的指针,当使用data++表达式时,会改变指针指向的位置,因此建议在代码中使用时要小心。

当传入一个数组时,这个数组的指针指向哪里?

在C语言中,当使用一个数组名作为实参传递给函数时,实际传递的是数组的第一个元素的地址,即数组名会被转换为一个指向其第一个元素的指针.

void headvisit(int data[],int n)
{
    int i , j , t;
    while(n>1)  //共有n个元素,每一个都要与父节点的值相比较 
    {
        for(i=n/2;i>=1;i--)// n/2是找到最后一个叶子的父节点在树中的位置,当i=1时,就说明此时在根节点处,在树中根节点是从1开始的 并不是0 
        {
            
            if(data[i-1]>data[2*i-1]) //根据树的基本结构 此处是与左孩子比较 
            {
                t = data[2*i-1];
                data[2*i-1] = data[i-1];
                data[i-1] = t;
            }
            
            //先判断右孩子是否存在 右孩子的度一定是小于等于总节点数的(n) 
            if( 2*i+1 <= n && data[i-1] > data[2*i-1+1])
            {
                t = data[2*i-1+1];
                data[2*i-1+1] = data[i-1];
                data[i-1] = t;
            }
        }
        data++; 
        n--;
    }
}

void outs(int data[],int n)
{
    for(int i = 0 ; i < n ; i++)
    {
        printf("%10d",data[i]);
    }
}
int main()
{
    int data[5] = {9,25,444,17536,9456};
    headvisit(data,5);
    outs(data,5);
    return 0;
}

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

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

相关文章

平板第三方电容笔怎么样?apple pencil一代平替笔推荐

我是一位数码产品的爱好者&#xff0c;所以我对电容笔也有一定的了解。我认为&#xff0c;苹果的原装电容笔和一般的电容笔的区别&#xff0c;在于它们所能产生的压感效果不同。由于苹果的电容笔具有独特的“重力压感”&#xff0c;因此&#xff0c;这款画笔能让我们快速地在画…

搜索二维矩阵 II——力扣240

文章目录 题目描述法一&#xff09;二分查找法二&#xff09;抽象二叉搜索树BST法三&#xff09;直接查找 题目描述 法一&#xff09;二分查找 与搜索二维矩阵——力扣74不同&#xff0c;本题没有保证「每行的第一个整数大于前一行的最后一个整数」&#xff0c;因此无法采取「两…

CentOS安装过程笔记

以前弄过一个ls的版本是直接虚拟机带起的。是系统都是别人给设置好调好的win系统的。后来发现问题&#xff0c;自己也不会搞&#xff0c;所以那个平台就一直扔在那里也没用过。 这次自己搞就想从0试一下吧。一直以为服务器必须Linux才行&#xff0c;所以就想安个CentOS&#x…

TLS 加速技术:Intel QuickAssist Technology(QAT)解决方案

作者&#xff1a;vivo 互联网服务器团队- Ye Feng 本文介绍了 Intel QAT 技术方案&#xff0c;通过Multi-Buffer技术和QAT硬件加速卡的两种方式实现对TLS的加速 一、背景 当前 TLS 已经成为了互联网安全的主要传输协议&#xff0c;TLS带来更高的安全性的同时&#xff0c;也带…

【C++】用红黑树迭代器封装map和set

封装有点难 - . - 文章目录 前言一、红黑树原先代码的修改二、红黑树迭代器的实现总结 前言 因为我们要将红黑树封装让map和set使用&#xff0c;所以我们要在原来的基础上将红黑树代码进行修改&#xff0c;最主要的是修改模板参数&#xff0c;下面我们直接进入正题&#xff1a…

C++ 布隆过滤器哈希切割

前言 现实生活中&#xff0c;存在很多key_value的模型&#xff0c;我们可以使用哈希或者红黑树存储这些数据。但是二者只是内存的存储方式&#xff0c;无法处理海量数据。 海量数据的处理我们可以使用位图处理。但是位图的局限性是&#xff0c;其只能映射整型&#xff0c;对于…

【k8s】Jenkins实现springcloud应用CI、CD实践 【三】【待写】

一、运行Jenkins流水线流程思路&#xff1a; 场景&#xff1a;java微服务应用&#xff0c; 单体仓库&#xff0c;多个微服务模块&#xff0c;&#xff08;并行构建、自动化构建、根据模块变更仅更新特定模块&#xff09; java、nodejsCI阶段 并行方式; 根据模块变…

港联证券|标普500指数年内涨逾9%,美股牛市已至?

今年以来&#xff0c;美国标普500指数累计上涨超过9%&#xff0c;这引发了一场关于美股牛市是否已经到来的辩论。 持悲观态度的摩根士丹利股票策略师威尔逊&#xff08;Michael Wilson&#xff09;警告称&#xff0c;最近的反弹不过是一种假象。而美国银行的萨勃拉曼尼亚&#…

四、数据仓库详细介绍(规范)

大家好&#xff0c;这是数据仓库系列的第三个话题&#xff0c;排序在架构之后、建模之前。为什么会提的这么靠前呢&#xff1f; 因为规范约束的是数仓建设的全流程&#xff0c;以及后续的迭代和运维。事实上&#xff0c;数仓规范文档&#xff0c;应该随着架构设计文档&#xf…

chatgpt赋能Python-python_lambdify

Python Lambdify: 一个方便的数学表达式转换工具 Python是一种广泛使用的编程语言&#xff0c;适用于各种领域&#xff0c;如数据科学、机器学习和科学计算等。在这些领域中&#xff0c;数学表达式起到了至关重要的作用&#xff0c;而Python Lambdify&#xff08;简称为“lamb…

计算机操作系统(慕课版)第四章课后题答案

一、简答题 1.什么是临界资源&#xff1f;什么是临界区&#xff1f; 临界资源&#xff1a;以互斥形式访问的资源&#xff1b;临界区&#xff1a;访问临界资源的代码。 2.同步机制应遵循的准则有哪些&#xff1f; 空闲让进&#xff1b;忙则等待&#xff1b;有限等待&#xff1b…

Windows本地快速搭建SFTP服务共享文件【外网访问】

文章目录 1. 搭建SFTP服务器1.1 下载 freesshd服务器软件1.3 启动SFTP服务1.4 添加用户1.5 保存所有配置 2 安装SFTP客户端FileZilla测试2.1 配置一个本地SFTP站点2.2 内网连接测试成功 3 使用cpolar内网穿透3.1 创建SFTP隧道3.2 查看在线隧道列表 4. 使用SFTP客户端&#xff0…

数据结构与算法-单调栈1

先介绍一下单调栈是什么 一种特别设计的栈结构&#xff0c;为了解决如下的问题&#xff1a; 给定一个可能含有重复值的数组arr&#xff0c;i位置的数一定存在如下两个信息 1&#xff09;arr[i]的左侧离i最近并且小于(或者大于)arr[i]的数在哪&#xff1f; 2&#xff09;arr[…

买法拍房注意事项

1、查清法拍房房屋属性。 竞拍前需查清楚法拍房的使用年限、能否办理房产证、土地性质等。 若土地为划拨属性&#xff0c;房屋可能需补缴土地出让金&#xff0c;该费用最好提前咨询当地不动产登记中心了解。 2、产权是否涉及二次过户。 二次过户指的是房屋已经过2次交易&…

苦卷一个月,P9大佬给我的Alibaba面试手册,终于成功踹开字节大门

怎么说呢&#xff0c;今年真的是寒气逼人啊&#xff01;在这个大环境下&#xff0c;裁员已经不算是特别的事情&#xff0c;粗暴裁员也许是未来一种趋势…在职的卷的起飞&#xff0c;离职的找不到好工作。 做点能做的&#xff1a;跑跑步骑骑车多锻炼&#xff1b;当当上面正版书…

分布式全局唯一id实现-2 springCloud-MyBatis-Plus集成百度分布式全局id(uid-generator)

前言&#xff1a;MyBatis-Plus 集成百度的uid-generator &#xff0c;实现业务实体在insert 实体时&#xff0c;可以自动获取全局id&#xff0c;完成数据保存&#xff1b; 1 uid-generator 全局id 生成的方式了解&#xff1a; Snowflake算法描述&#xff1a;指定机器 & 同…

如何避免孩子独自在家偷偷使用电脑?

电脑为我们的生活带来了极大的便利&#xff0c;但是对于孩子来说&#xff0c;过早的接触网络很容易影响其健康的成长。家长在家的话&#xff0c;还可以监督孩子&#xff0c;但如果家长出门了&#xff0c;该如何避免孩子偷偷使用电脑呢&#xff1f;其实方法很简单&#xff0c;只…

网络进阶学习:交换机二层

交换机二层 交换机的概念和作用交换机的划分交换机第二层的内容⭐第一部分&#xff1a;MAC地址⭐第二部分&#xff1a;逻辑链路控制子层⭐第三部分&#xff1a;介质访问控制子层⭐第四部分&#xff1a;交换机转发表⭐第五部分&#xff1a;VLAN⭐第六部分&#xff1a;STP 交换机…

Hudi系列25: Flink SQL使用checkpoint恢复job异常

文章目录 一. 通过Flink SQL将MySQL数据写入Hudi二. 模拟Flink任务异常2.1 手工停止job2.2 指定checkpoint来恢复数据2.3 整个yarn-session上的任务恢复 三. 模拟源端异常3.1 手工关闭源端 MySQL 服务3.2 FLink任务查看 FAQ:1. checkpoint未写入数据2. checkpoint 失败3. 手工取…

自然语言处理技术简介

长期以来&#xff0c;研究人员进行自然语言处理研究主要依赖各种机器学习模型&#xff0c;以及手工设计的特征&#xff0c;但这样做带来的隐患是由于语言信息被稀疏表征表示&#xff0c;会出现维度诅咒之类的问题。而随着近年来词嵌入&#xff08;低维、分布式表征&#xff09;…