【算法】- 排序 - 堆排序

文章目录

  • 前言
  • 一、堆排序思想
  • 二、堆排序
  • 总结


前言

编译语言:C++
编译器:VS2022


一、堆排序思想

堆排序的思想也就是将数列转化成大顶堆数列,通过充分利用大顶堆数列的特点,第一个数是整个数组的最大值,将这个数放大数列的最后一个位置,这样也就完成了一个位置排序,然后再次调整数列成为堆排序,然后循环这样就可以就可以完成对数列的排序

二、堆排序

#define MAXSIZE 10//数组要排序的个数
#include <iostream>
using namespace std;
//交换
void Swap(int arr[], int n, int m)
{int tmp = arr[n];arr[n] = arr[m];arr[m] = tmp;
}
//调整为大顶堆排序
void HeapAdjust(int arr[], int s, int n)
{int j;arr[0] = arr[s];//存放双亲结点的值for (j = 2 * s; j <= n; j*=2)//找到双亲的所有左孩子结点{if (j<n && arr[j] < arr[j + 1])//如果右孩子比左孩子大则j加1,且在序列内j++;if (arr[s] >= arr[j])//如果双亲比孩子结点都大则直接返回,且在序列内break;arr[s] = arr[j];//将比双亲大的孩子赋值给双亲s = j;//将j下标给s,找到要交换的孩子结点}arr[s] = arr[0];//将孩子和双亲完成交换
}
//堆排序
void HeapSort(int arr[])
{int i;for (i = MAXSIZE / 2; i > 0; i--)//找到每个有孩子的双亲(这里是层序排列完全二叉树)HeapAdjust(arr, i, MAXSIZE);//将无序的数列调整为大顶堆for (i = MAXSIZE; i > 1; i--)//从数列最后一个数开始循环{Swap(arr, 1, i);//交换每个大顶堆第一个数和最后一个数HeapAdjust(arr, 1, i-1);//再次调整为大顶堆}
}
int main()
{int i;int arr[MAXSIZE + 1] = { 0,5,2,3,7,8,6,1,9,10,4 };//创建要排序数组HeapSort(arr);//进行堆排序for (i = 1; i <= MAXSIZE; i++)cout << arr[i] << " ";return 0;
}

总结

时间复杂度O(nlogn)

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

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

相关文章

fmql之Linux设备驱动框架

设备驱动框架 正点原子第39章---LED驱动框架 测试 成功&#xff1a; 贴代码 &#xff08;不需要测试APP&#xff09; /***************************************************************Copyright © ALIENTEK Co., Ltd. 1998-2029. All rights reserved.文件名 : le…

Copilot重磅更新!OneDrive全新功能炸裂

今天早上一打开onedrive&#xff0c;就发现了弹窗提醒&#xff0c;它&#xff0c;终于来了&#xff1a; copilot in onedrive全新功能来袭&#xff01; 当我们在onedrive中随意选择一个文件&#xff0c;顶部功能栏便出现了copilot按钮&#xff1a; 点击按钮后出现三个选项&…

Tauri 2.0 稳定版发布

Tauri 2.0 稳定版发布 Tauri 是什么&#xff1f; Tauri 应用程序的前端使用您喜欢的 Web 前端栈编写。它在操作系统的 WebView 中运行&#xff0c;并与主要用 Rust 编写的应用核心进行通信。 我何时应该使用 Tauri&#xff1f; 如下任一一项符合&#xff0c;你应该使用 Ta…

立体扬声器棒球帽专利TRO维权,速查避免踩坑

案件基本情况起诉时间&#xff1a;2024-9-18案件号&#xff1a;24-cv-08626原告&#xff1a;Audiowear Technology Corporation原告律所&#xff1a;Loza & Loza, LLP起诉地&#xff1a;伊利诺伊州北部法院品牌介绍Audiowear Technology Corporation&#xff0c;一家位于特…

SpringMVC框架:入门讲解和基础案例解析

Spring Web MVC是什么&#xff1f; Spring Web MVC是一种基于Java的实现了Web MVC设计模式的请求驱动类型的轻量级Web框架。使用了MVC架构模式的思想&#xff0c;将web层进行职责解耦&#xff0c;基于请求驱动指的就是使用请求-响应模型 。框架的目的就是帮助我们简化开发&…

嵌入式设备硬件和软件安全设计

1. 引言 哪个领域的网络安全实施记录最差&#xff1f; 既不是 PKI/数字证书&#xff0c;也不是 密钥管理&#xff0c;也不是 OAuth。很可能是嵌入式设备和物联网 领域。 总的来说&#xff0c;这似乎是一个梦想&#xff0c;但如果可设计出“设计安全”的系统&#xff0c;而不…

DHCP Snooping典型配置举例(如何防止路由器乱接问题)

全局开启DHCP Snooping配置举例 组网需求 Router B通过以太网端口Ten-GigabitEthernet0/0/6连接到合法DHCP服务器&#xff0c;通过以太网端口Ten-GigabitEthernet0/0/8连接到非法DHCP服务器&#xff0c;通过Ten-GigabitEthernet0/0/7连接到DHCP客户端。要求&#xff1a; 与合…

各省常住人口及人口密度面板数据(2000-2022年)

常住人口指在某地区居住超过一定时间&#xff08;通常为半年以上&#xff09;的人口&#xff0c;而人口密度则指每平方千米或每公顷内的常住人口数。数据集的主要指标包括&#xff1a; 省份年份常住人口&#xff08;万人&#xff09;人口密度&#xff08;人/平方公里&#xff…

每日学习一个数据结构-图

文章目录 图基础一、图的定义二、图的相关概念三、图的分类四、图的使用场景 和图相关的算法一、图的遍历算法二、最短路径算法三、最小生成树算法四、图匹配算法五、网络流算法 图基础 一、图的定义 在数学中&#xff0c;图是描述于一组对象的结构&#xff0c;其中某些对象对…

宠物咖啡馆业务自动化:SpringBoot框架的实现方法

3系统分析 3.1可行性分析 通过对本基于Spring Boot的宠物咖啡馆平台的设计与实现实行的目的初步调查和分析&#xff0c;提出可行性方案并对其一一进行论证。我们在这里主要从技术可行性、经济可行性、操作可行性等方面进行分析。 3.1.1技术可行性 本基于Spring Boot的宠物咖啡馆…

(11)(2.1.4) DroneCAN ESCs

文章目录 前言 1 DroneCAN ESC列表 2 连接到飞行控制器 3 自动驾驶仪设置 4 记录和报告 5 附加资料 前言 Copter、Plane 和 Rover 支持 DroneCAN 电子速度控制器&#xff08;ESC&#xff09;&#xff0c;该控制器允许与自动驾驶仪进行双向通信&#xff0c;从而可能更容易…

数据库管理-第250期 深入浅出多主多活数据库技术- Cantian存储引擎(一)(20241009)

数据库管理250期 2024-10-09 数据库管理-第250期 深入浅出多主多活数据库技术- Cantian存储引擎&#xff08;一&#xff09;&#xff08;20241009&#xff09;1 简介2 引擎构成3 引擎架构4 文件分布5 分布式MVCC6 限制/要求总结 数据库管理-第250期 深入浅出多主多活数据库技术…

EtherCAT学习笔记

文章目录 前言一、EtherCAT介绍二、EtherCA系统组成2.1 ESC(EtherCAT从站控制器)2.2 从站控制微处理器2.3 物理层器件2.4 其它应用层器件 三、EtherCAT数据帧结构3.1 寻址方式3.2 时钟3.3 通信模式 四、状态机和通信初始化五、应用层协议六、ESC概述6.1 EtherCAT从站控制芯片6.…

02_InFluxDb

InFluxDb 初始化初始化流程 交互InFluxDbWebUI交互 数据模型行协议添加标签数据格式 数据类型空格索引 初始化 初始化流程 用户 密码 组织名称 Bucket—mysql里面的数据库概念 交互InFluxDb 暂用了8086端口.提供了 http api WebUI交互 略... 数据模型 这是mysql里面的表…

基于SSM的电脑硬件库存管理系统【附源码】

基于SSM的脑硬件库存管理系统&#xff08;源码L文说明文档&#xff09; 目录 4 系统设计 4.1 设计原则 4.2 功能结构设计 4.3 数据库设计 4.3.1 数据库概念设计 4.3.2 数据库物理设计 第5章 系统实现 5.1 管理员功能实现 5.1.1 硬件管理 5.1…

Java开发者测试:Junit5

Java开发者测试 实际代码编写中所用到的单元测试框架基本是Junit结合Mockito使用 Junit spring自带的单元测试框架,涵盖了大部分功能 通过Test注解即可直接生成测试用例 Test public void calTest(){Assert.assertEquals(junit.cal(1,2),3); }BeforeAll 表明在所有测试方法…

learn C++ NO.21——AVL树

简单介绍一下AVL树 AVL树是一种自平衡的二叉搜索树&#xff08;Balanced Binary Search Tree, BBST&#xff09;&#xff0c;由俄罗斯数学家G. M. Adelson-Velsky和E. M. Landis在1962年发明&#xff0c;因此以其名字首字母命名。AVL树通过保持任何节点的两个子树的高度最大差…

笔记 | ASPICE 简介

什么是 ASPICE&#xff08;Automotive SPICE&#xff09; Automotive SPICE&#xff08;简称 A-SPICE 或 ASPICE&#xff09;是欧洲 20 多家主要汽车制造商以ISO/IEC 15504&#xff08;SPICE&#xff0c;Software Process Improvement and Capability dEtermination&#xff0…

Java反射专题

目录 一.反射机制 1.Java Reflection 2.反射相关的主要类 3.反射的优缺点 4.反射调用优化—关闭访问检查 二.Class类 1.基本介绍 2.常用方法 3.获取Class对象的方式 4.那些类型有Class对象 三.类加载 1.介绍 2.类加载时机 3.类加载各阶段 四.获取类结构的信息 1…

基于微信小程序的网上商城+ssm论文源码调试讲解

2 系统开发环境 2.1微信开发者工具 微信开发者工具现在已经被小程序开发团队开发运行&#xff0c;目前微信开发者工具任然在不断的完善中&#xff0c;在开发小程序时经常要不断的更新。可以使用微信扫码登陆开发者工具&#xff0c;开发者工具将使用这个微信帐号的信息进行小程…