当前位置: 首页 > news >正文

堆排序(大根堆)

堆的定义如下,n个关键字序列[1...n]称为堆,当且仅当满足:
a(i)>=a(2i)且a(i)>=a(2i+1)  这个为大根堆
a(i)<=a(2i)且a(i)<=a(2i + 1)  这个为小根堆

通过建堆得到大根堆
大根堆 87,45,78,32,17,65,53,9 可以看成
                    87
            45                78
        32        17        65        53
    9
    也就相当于是完全二叉树

#include<stdio.h>
void headadjust(int a[], int k, int i);
void swap(int *i, int *j)//交换堆顶和堆底元素
{int temp = *i;*i = *j; *j = temp;
}
void buildmaxheap(int a[], int len)//建立大根堆
{int i = 0;for (i = len / 2; i > 0; i--)//从i=[n/2]~1,反复调整堆headadjust(a, i, len);
}
void headadjust(int a[], int k, int len)//调整堆
{int i = 0;a[0] = a[k];//相当与根节点的复制值for (i = k * 2; i <=len; i *= 2)//从i较大的子节点向下筛选{if (i < len && a[i] < a[i + 1])//左孩子跟右孩子的大小i++;if (a[0] >= a[i])//根结点的值大于左右孩子直接退出break;else{a[k] = a[i];//否则交换孩子与根节点的值k = i;}}a[k] = a[0];//被筛选的值放在最后位置
}
int main()//堆排序
{int i = 0;int a[] = {0,53,17,78,9,45,65,87,32};int sz = sizeof(a) / sizeof(a[0]);printf("原来的数组为\n");for (i = 1; i < sz; i++)printf("%d ", a[i]);buildmaxheap(a, sz-1);//初始建堆for (i = sz-1; i > 1; i--){swap(&a[i], &a[1]);//调用swap()函数交换堆顶和堆底元素,此时堆得性质被破坏headadjust(a, 1, i - 1);//把剩余的i-1个元素整理成堆}printf("\n排完序的数组为\n");for (i = 1; i < sz; i++)printf("%d ", a[i]);return 0;
}

相关文章:

堆排序(大根堆)

堆的定义如下&#xff0c;n个关键字序列[1...n]称为堆&#xff0c;当且仅当满足&#xff1a; a(i)>a(2i)且a(i)>a(2i1) 这个为大根堆 a(i)<a(2i)且a(i)<a(2i 1) 这个为小根堆 通过建堆得到大根堆 大根堆 87,45,78,32,17,65,53,9 可以看成 …...

Mybatis学习笔记3 在Web中应用Mybatis

Mybatis学习笔记2 增删改查及核心配置文件详解_biubiubiu0706的博客-CSDN博客 技术栈:HTMLServletMybatis 学习目标: 掌握mybatis在web应用中如何使用 Mybatis三大对对象的作用域和生命周期 关于Mybatis中三大对象的作用域和生命周期、 官网说明 ThreadLocal原理及使用 巩…...

软件测试之功能测试详解

一、功能测试概述 1&#xff09;功能测试就是对产品的各功能进行验证&#xff0c;根据功能测试用例&#xff0c;逐项测试&#xff0c;检查产品是否达到用户要求的功能。 2&#xff09;功能测试&#xff0c;根据产品特性、操作描述和用户方案&#xff0c;测试一个产品的特性和…...

javascript选取元素的范围,可以包含父级,也可以不包含父级

//函数可以选取元素的范围&#xff0c;对于要选取文本的非常方便&#xff0c;或选取特定的子节点 function getRange(element){//判断是否支持range范围选取var supdocument.implementation.hasFeature("Range","2.0");var also(typeof document.createRan…...

QGIS怎么修改源代码?持续更新...

修改配置文件保存位置 修改目的&#xff1a;放着和本地安装的其他QGIS共用一份配置文件 修改文件&#xff1a;core/qgsuserprofilemanager.cpp 修改位置&#xff1a;第37行 return basePath QDir::separator() "my_profiles";修改完毕后&#xff0c;再次生成一下…...

dev board sig技术文章:轻量系统适配ARM架构芯片平台

摘要&#xff1a;本文简单介绍OpenHarmony轻量系统移植&#xff0c;会分多篇 适合群体&#xff1a;想自己动手移植OpenHarmony轻量系统的朋友 开始尝试讲解一下系统的移植&#xff0c;主要是轻量系统&#xff0c;也可能会顺便讲下L1移植。 1.1移植类型 OpenHarmony轻量系统的…...

MyBatis之增删查改功能

文章目录 一、创建各种类二、MyBatis的各种功能 1、查询<select>2、增加<insert>3、修改<update>4、删除<delete>三、总结 前言 在MyBatis项目中编写代码实现对MySql数据库的增删查改 一、创建各种类 1、在Java包的mapper文件下创建一个接口 我创建…...

Leetcode算法入门与数组丨5. 数组二分查找

文章目录 1 二分查找算法2 二分查找细节3 二分查找两种思路3.1 直接法3.2 排除法 1 二分查找算法 二分查找算法是一种常用的查找算法&#xff0c;也被称为折半查找算法。它适用于有序数组的查找&#xff0c;并通过将待查找区间不断缩小一半的方式来快速定位目标值。 算法思想…...

拓扑关系如何管理?

在设备对接涂鸦的云端过程中&#xff0c;一部分设备由于自身资源或硬件配置&#xff0c;无法直接连接云端。而是需要通过网关进行中转&#xff0c;由网关代理实现和云端进行数据交互&#xff0c;间接实现设备接入云端。这样的设备也称为子设备。 要想实现网关代理子设备接入云…...

vue的由来、vue教程和M-V-VM架构思想、vue的使用、nodejs

vue vue的由来 vue教程和M-V-VM架构思想 vue的初步简单使用 nodejs vue的由来 # 1 HTML(5)、CSS(3)、JavaScript(ES5、ES6、ES11)&#xff1a;编写一个个的页面 -> 给后端(PHP、Python、Go、Java) -> 后端嵌入模板语法 -> 后端渲染完数据 -> 返回数据给前端 ->…...

课程表 循环依赖 拓扑排序 go语言

学会拓扑排序题目的基本解法 res数组 记录上课顺序g 记录学了课程i 能解锁的课程jindeg 记录每个课程的入度q 记录入度为0的课程 for循环q去解放其他课程 本题来自力扣课程表 func findOrder(numCourses int, prerequisites [][]int) []int {res : []int{}//建一个二维数组记…...

【红包雨接口设计】

一、服务器地址 http://rb.atguigu.cn 二、公共请求头参数 参数名称类型是否必选描述tokenString是用户唯一标识 备注&#xff1a;为了方便我们今天演示&#xff0c;服务端接受所有token。 三、接口 1. 创建红包雨 请求方式&#xff1a;GET请求地址&#xff1a;/api/v1/se…...

SSL证书到期更换证书会影响排名吗?

在现代的数字化时代&#xff0c;网络安全和用户体验成为了网站运营商和开发者们需要高度关注的问题。SSL证书作为一种重要的安全协议&#xff0c;对网站的安全性和用户信任起着至关重要的作用。然而&#xff0c;随着SSL证书的有效期限届满&#xff0c;许多网站运营商面临着更换…...

前端常用库之-JavaScript工具库lodash

文章目录 前端常用库之-JavaScript工具库lodash一、什么是lodash二、安装三、lodash使用Lodash 的 pick() 函数介绍和使用react 实例demo&#xff1a;pick结合...展开运算符(spread operator) 前端常用库之-JavaScript工具库lodash 一、什么是lodash 官网&#xff1a; https:…...

Linux- execve()

execve() 是 Linux/UNIX 中的 exec 函数家族中的一个&#xff0c;它允许进程执行一个新的程序。具体地&#xff0c;execve() 替换当前进程的映像为新的程序映像。 函数原型如下&#xff1a; int execve(const char *pathname, char *const argv[], char *const envp[]);pathn…...

007 数据结构_堆——“C”

前言 本文将会向您介绍关于堆Heap的实现 具体步骤 tips&#xff1a;本文具体步骤的顺序并不是源代码的顺序 typedef int HPDataType; typedef struct Heap {HPDataType* _a;int _size;int _capacity; }Heap;初始化 void HeapCreate(Heap* hp, HPDataType* a, int n) {hp-&…...

zabbix的原理与安装

一、Zabbix介绍 1、zabbix 是什么&#xff1f; zabbix是一个开源的IT基础监控软件&#xff0c;能实时监控网络服务&#xff0c;服务器和网络设备的状态&#xff0c;如网络使用&#xff0c;CPU负载、磁盘空间等&#xff0c;主要是包括数据的收集、报警和通知的可视化界面zabbi…...

ReactNative中升级IOS 17版本Crash解决

ReactNative中升级IOS 17版本Crash解决 ReactNative中升级IOS 17版本Crash解决一、问题描述二、原因分析三、解决方案决策3.1 设置宽高为非零值3.2 使用新的UIGraphicsImageRenderer替换就版本的UIGraphicsBeginImageContext 四、可能使用到该API的三方库4.1 react-native-fast…...

MongoDB详解

一、MongoDB概述 MongoDB 是一个基于 分布式文件存储 的开源 NoSQL 数据库系统&#xff0c;由 C 编写的。MongoDB 提供了 面向文档 的存储方式&#xff0c;操作起来比较简单和容易&#xff0c;支持“无模式”的数据建模&#xff0c;可以存储比较复杂的数据类型&#xff0c;是一…...

【SpringCloud微服务全家桶学习笔记-服务注册zookeeper/consul】

SpringCloud微服务全家桶学习笔记 Eureka服务注册 gitee码云仓库 9.其他服务注册框架 &#xff08;1&#xff09;zookeeper安装与使用 zookeeper需安装在虚拟机上&#xff0c;建议使用CentOS&#xff0c;安装地址如下&#xff1a; zookeeper镜像源 选择第一个进入后下载ta…...

Avalonia跨平台开发踩坑记:我的第一个带最小化/关闭按钮的MVVM应用

Avalonia跨平台开发实战&#xff1a;从零构建MVVM窗口控制应用 第一次接触Avalonia时&#xff0c;我被它"一次编写&#xff0c;多平台运行"的承诺所吸引。作为一个长期使用WPF的开发者&#xff0c;跨平台桌面应用开发一直是个痛点。但当我真正开始用Avalonia实现一个…...

UniApp+Vue3避坑指南:为什么getAppWebview会失效?从原理到解决方案

UniAppVue3深度解析&#xff1a;getAppWebview失效的底层逻辑与工程化解决方案 在UniApp与Vue3的技术栈组合中&#xff0c;不少开发者遭遇过getAppWebview神秘失效的困境。这个看似简单的API调用问题&#xff0c;背后却隐藏着Vue3响应式系统变革与UniApp多端渲染机制的深层交互…...

GPT-5.4 Pro接入Java!百万上下文+电脑操控,Spring AI集成教程

文章目录前言一、先搞清楚你在驯服什么野兽二、Spring AI Alibaba是什么鬼&#xff1f;核心优势三、环境准备&#xff1a;别在JDK版本上栽跟头四、基础对话&#xff1a;先让AI开口说话五、百万上下文的正确打开方式六、Computer Use&#xff1a;让AI真的动起来实际应用场景七、…...

ClawdBot实战教程:零基础搭建个人AI助手的完整流程

ClawdBot实战教程&#xff1a;零基础搭建个人AI助手的完整流程 1. ClawdBot简介&#xff1a;你的本地AI助手 ClawdBot是一个可以在个人设备上运行的AI助手解决方案&#xff0c;基于vLLM提供后端模型能力。与常见的云端AI服务不同&#xff0c;它完全运行在本地环境中&#xff…...

直流GIL绝缘子表面电荷积聚的电热耦合机理与电场畸变特性研究

中国电机工程学报文献复现 关于comsol GIL仿真模型&#xff1a;基于电热多物理场耦合模型的直流GIL 绝缘子表面电荷积聚及其对沿面电场影响的研究上周啃完那篇中国电机工程学报的直流GIL绝缘子仿真论文&#xff0c;本来以为照着公式套就能搞定&#xff0c;结果在Comsol里卡了整…...

LeifHomieLib:ESP32/8266轻量级Homie v3 MQTT设备库

1. LeifHomieLib 项目概述LeifHomieLib 是一个专为 ESP8266 和 ESP32 平台设计的轻量级 Homie v3 协议实现库&#xff0c;其核心目标是为资源受限的物联网边缘节点提供符合 Homie 规范的 MQTT 设备抽象能力。该库并非 Homie v3 标准的全功能实现&#xff0c;而是聚焦于与 openH…...

PCap04电容测量实战:从传感器连接到串口通信的完整指南

PCap04电容测量实战&#xff1a;从传感器连接到串口通信的完整指南 当工程师面对高精度电容测量需求时&#xff0c;PCap04芯片往往成为解决复杂问题的关键。这款集成了数字信号处理能力的电容数字转换器(CDC)&#xff0c;能够将皮法级电容变化转化为精确的数字信号。不同于传统…...

Zotero插件Ethereal Style:打造高效文献管理新体验

Zotero插件Ethereal Style&#xff1a;打造高效文献管理新体验 【免费下载链接】zotero-style zotero-style - 一个 Zotero 插件&#xff0c;提供了一系列功能来增强 Zotero 的用户体验&#xff0c;如阅读进度可视化和标签管理&#xff0c;适合研究人员和学者。 项目地址: ht…...

低查重不是梦!AI写教材工具,让教材生成轻松又高效!

借助AI工具&#xff0c;开启教材创作新纪元 谁没有在编写教材框架时陷入困境呢&#xff1f;面对一张空白的文档&#xff0c;足足坐在那里半小时却不知道该从哪里开始——究竟是先介绍概念&#xff0c;还是先提供案例&#xff1f;章节划分该遵循逻辑还是按课时来的&#xff1f;…...

OpenArk:新一代Windows系统安全分析工具完整指南

OpenArk&#xff1a;新一代Windows系统安全分析工具完整指南 【免费下载链接】OpenArk The Next Generation of Anti-Rookit(ARK) tool for Windows. 项目地址: https://gitcode.com/GitHub_Trending/op/OpenArk 如果你正在寻找一款强大的Windows系统安全分析工具&#…...