八大排序之堆排序

堆排序算法思想:

堆排序是利用二叉树的原理,模拟二叉树将所求的数据放入存放树中,先将所有数据按照大根堆排列,排列之后再依次的给树按从小到大排列.

例如

2 5 44 21 11 6 1 9

我们将数据按照这样的二叉树的形式列举出来,然后将数据进行大根堆的转换(注:我们再进行大根堆的转换的时候应该从最小的一个二叉树开始进行,然后逐渐进行),转换完成后将未定下来的最大数字跟最上面的节点交换,一直循环,直到完全有序

大根堆转换:转换的时候我们先比较左孩子跟右孩子的大小,然后将大的跟父进行比较,如果比父大,就交换这两个位置,一直循环进行

代码实现:

void  HeapAdjust(int* arr, int start, int end)//堆调整
{
	int  tmp = arr[start];
	for (int i = 2 * start + 1; i <= end; i=2*i+1)
	{
		if (i < end && arr[i] < arr[i + 1])//如果有右孩子,并且左孩子的值小于右孩子
		{
			i++;
		}//i一定是左右孩子的最大值
		if (arr[i] > tmp)
		{
			arr[start] = arr[i];
			start = i;
		}
		else
		{
			break;
		}
	}
	arr[start] = tmp;
}

void   HeapSort(int* arr, int len)//堆排序,O(nlogn),O(1),不稳定
{
	int i;
	//第一次建立大根堆,从后往前,多次调整
	for (i = (len - 1 - 1) / 2; i >= 0; i--)//有一个数学证明,O(n)
	{
		HeapAdjust(arr, i, len - 1);//第一次建立大根堆
	}

	//每次将根和待排序的最后一个交换,然后再次调整
	int  tmp;
	for (i = 0; i < len - 1; i++)  //O(nlogn)
	{
		//交换
		tmp = arr[0];
		arr[0] = arr[len - 1 - i];
		arr[len - 1 - i] = tmp;

		//再次调整
		HeapAdjust(arr, 0, len -1-i  -1);//堆调整
	}
}

总结:

时间复杂度:O(nlogn),系数大,空间复杂度O(1),不稳定
 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

FPGA时钟资源详解(1)——时钟Buffer的选择

FPGA时钟系列文章总览&#xff1a;FPGA原理与结构&#xff08;14&#xff09;——时钟资源https://ztzhang.blog.csdn.net/article/details/132307564 目录 一、概述 二、时钟Buffer的选择 2.1 BUFG 2.2 BUFR 和 BUFIO 2.2.1 源同步接口的支持 2.2.2 扩展时钟域…

DREAM: A Dynamic Scheduler for Dynamic Real-time Multi-model ML Workloads——论文泛读

ASPLOS 2024 Paper 论文阅读笔记整理 问题 新兴的实时多模型ML&#xff08;RTMM&#xff09;工作负载&#xff0c;如AR/VR和无人机控制&#xff0c;涉及各种粒度的动态行为&#xff1a;任务、模型和模型中的层。这种动态行为给ML系统中的系统软件带来了新的挑战&#xff0c;与…

深度学习中不同学习率调整策略

1、StepLR 功能&#xff1a;固定等间隔调整学习率 主要参数&#xff1a; step_size:调整间隔数 gamma&#xff1a;调整系数 调整方式&#xff1a; l r l r ∗ g a m m a lrlr\ast gamma lrlr∗gamma 2、MultiStepLR 功能&#xff1a;按给定间隔调整学习率 主要参数&#xf…

Linux——磁盘与文件系统管理

目录 磁盘分区的表示 硬盘分区 分区类型 确认系统中的磁盘设备——fdisk 规划硬盘中的分区——fdisk 文件系统 文件系统类型&#xff1a; 在分区中创建文件系统——mkfs&#xff0c;mkswap 挂载文件系统 mount命令 umount命令 查看分区挂载情况 设置启动载入&…

负荷频率控制LFC,自抗扰ADRC控制,麻雀SSA算法优化自抗扰参数,两区域二次调频simulink/matlab

红色曲线为优化结果&#xff0c;蓝色曲线为没有自抗扰和没有优化的结果&#xff01;

Mac系统中使用VSCode安装C#开发环境进行编译调试

VSCode安装插件 C#c# Dev Kit 安装Mac版本 .net .net下载地址 查看安装结果 dotnet --list-sdksdotnet --info配置环境变量 open -e ~/.bash_profile添加如下内容 export DOTNET_ROOT/usr/local/share/dotnet export PATH$PATH:$DOTNET_ROOT终端重新加载配置文件 sourc…

原子激光器(原子激射器)可发射相干原子束 目前仍处于技术研究阶段

原子激光器&#xff08;原子激射器&#xff09;可发射相干原子束 目前仍处于技术研究阶段 原子激光器&#xff0c;也称为原子激射器&#xff0c;是一种能够产生原子激光的器件。原子激光由粒子组成&#xff0c;拥有频率和波长&#xff0c;原子激光器受激发射电磁波&#xff0c;…

顺丰接口接入-主要处理下单接口上电子面单上传问题

概述 最近接到一个需求&#xff0c;需要和顺丰接口对接。由于是第一次对接&#xff0c;就需要把所有的流程全部走一遍&#xff0c;从 注册到 关联API 以及代码测试&#xff0c;电子面单审核&#xff0c;上线&#xff0c;下面就分开来说明把。本来是想着偷懒来着&#xff0c;作…

Days 35 ElfBoard板对Java的支持

Java作为一种功能强大且广泛应用的编程语言&#xff0c;具有广泛的适应性和实用性。在ELF 1开发板上集成Java支持&#xff0c;无疑将赋予嵌入式开发者更广阔的选择空间&#xff0c;今天就为各位小伙伴详细解析如何在ELF 1开发板上成功部署和运行Java环境。 1.拷贝两个压缩包到E…

FME学习之旅---day14

我们付出一些成本&#xff0c;时间的或者其他&#xff0c;最终总能收获一些什么。 【FME-HOW-TO系列】13 通过重新采样修改栅格像元大小 除了使用RasterResampler转换器进行重采样的操作外&#xff0c;还需要了解不同的插值方法&#xff0c;各方法大概的不同。 可以参考ArcG…

计算机网络(二)物理层

物理层 一、通信基础1.奈氏准则、香农定理2.编码与调制3.电路交换、报文交换、分组交换 二、 传输介质、设备1.导向性传输介质&#xff1a;1.1双绞线1.2 同轴电缆1.3光纤 2.非导向性传输介质&#xff1a; 一、通信基础 信道带宽&#xff1a;信道能通过的最高频率和最低频率之差…

学浪视频提取

经过调查,学浪这个学习平台越来越多人使用了,但是学浪视频官方没有提供下载按钮,为了让这些人能够随时随地的观看视频,于是我钻研学浪视频的下载,终于研究出来了并且做成软件批量版 下面是学浪视频提取的软件,有需要的自己下载一下 链接&#xff1a;https://pan.baidu.com/s/…

Chrome之解决:浏览器插件不能使用问题(十三)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

[flask]http请求//获取请求头信息+客户端信息

在网站中查询请求头信息&#xff0c;可以通过以下操作进行 右键然后选择检查 进入改页面后选择文档&#xff0c;刷新一下页面就好了 获取所有的请求头信息 print(request.headers, type(request.headers)) 在flask模块中&#xff0c;使用上面的输出函数就可以查看到有关于请求…

软考高级架构师:云原生架构概念和例题

作者&#xff1a;明明如月学长&#xff0c; CSDN 博客专家&#xff0c;大厂高级 Java 工程师&#xff0c;《性能优化方法论》作者、《解锁大厂思维&#xff1a;剖析《阿里巴巴Java开发手册》》、《再学经典&#xff1a;《Effective Java》独家解析》专栏作者。 热门文章推荐&am…

企业计算机服务器中了mkp勒索病毒怎么办,mkp勒索病毒解密流程步骤

在网络技术飞速发展的今天&#xff0c;越来越多的企业走向了数字化办公模式&#xff0c;网络为企业的生产运营提高了效率&#xff0c;为企业带来了极大便利&#xff0c;但网络是一把双刃剑&#xff0c;在为人们提供便利的同时也会带来数据安全问题&#xff0c;网络数据安全一直…

There is no getter for property named ‘deleted‘

实体类在继承BaseEntity的时候,由于没填写deleted参数名导致mybatis报错 这时候要么改application.yml里的mybatis参数&#x1f447; 要么就将BaseEntity基类的delete上加个existfalse&#x1f447;(推荐)

【单例模式】—— C++设计模式【附百度Apollo单例模式详细解读】

参考资料&#xff1a; &#xff08;1&#xff09;单例模式—— 代码随想录 &#xff08;2&#xff09;我给面试官讲解了单例模式后&#xff0c;他对我竖起了大拇指&#xff01; &#xff08;3&#xff09;C 单例模式详解 &#xff08;4&#xff09;单例模式之C实现&#xff0c;…

ssm 房屋销售管理系统开发mysql数据库web结构java编程计算机网页源码eclipse项目

一、源码特点 ssm 房屋销售管理系统是一套完善的信息系统&#xff0c;结合springMVC框架完成本系统&#xff0c;对理解JSP java编程开发语言有帮助系统采用SSM框架&#xff08;MVC模式开发&#xff09;&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模…

今天起,Windows可以一键召唤GPT-4了

现在&#xff0c;OpenAI 大模型加持的 Copilot 功能终于登陆 Windows 了。 把 Copilot 按钮放在 Windows 桌面的任务栏&#xff0c;甚至实体键盘上&#xff0c;用大模型提升每个人的生产效率。 美东时间 3 月 21 日周四&#xff0c;生成式 AI 领军的微软又为我们带来了一点小…