Problem C: 算法10-10,10-11:堆排序

news2024/11/23 19:18:25

Problem Description

堆排序是一种利用堆结构进行排序的方法,它只需要一个记录大小的辅助空间,每个待排序的记录仅需要占用一个存储空间。

首先建立小根堆或大根堆,然后通过利用堆的性质即堆顶的元素是最小或最大值,从而依次得出每一个元素的位置。

堆排序的算法可以描述如下:

 

 在本题中,读入一串整数,将其使用以上描述的堆排序的方法从小到大排序,并输出。

 Input Description

 

输入的第一行包含1个正整数n,表示共有n个整数需要参与排序。其中n不超过100000。

第二行包含n个用空格隔开的正整数,表示n个需要排序的整数。

 

 Output Description

 

只有1行,包含n个整数,表示从小到大排序完毕的所有整数。

请在每个整数后输出一个空格,并请注意行尾输出换行。

Sample Input

10
2 8 4 6 1 10 7 3 5 9

 Sample Output

1 2 3 4 5 6 7 8 9 10 

 Hint

在本题中,需要按照题目描述中的算法完成堆排序的算法。

堆排序对于元素数较多的情况是非常有效的。通过对算法的分析,不难发现在建立含有n个元素的堆时,总共进行的关键字比较次数不会超过4n,且n个节点的堆深度是log2n数量级的。因此,堆排序在最坏情况下的时间复杂度是O(nlog2n),相对于快速排序,堆排序具有同样的时间复杂度级别,但是其不会退化。堆排序较快速排序的劣势是其常数相对较大。

 我的想法:

 我的代码:

#include <iostream>
using namespace std;

typedef struct HeapLine
{
	int *str;
	int length;
}HeapLine;

void CreateLine(HeapLine &H, int n)
{
	H.str = new int[n + 1];
	H.length = n;
	for (int i = 1; i <= H.length; i++)
	{
		cin >> H.str[i];
	}
}

void DeleteLine(HeapLine &H)
{
	delete []H.str;
	H.length = 0;
}

void HeapAdjust(HeapLine &H, int s, int m)
{
	int j;
	int rc;
	rc = H.str[s];
	for (j = 2 * s; j <= m; j *= 2)
	{
		if (j < m && H.str[j] < H.str[j + 1])
			++j;
		if (rc > H.str[j])
			break;
		H.str[s] = H.str[j];
		s = j;
	}
	H.str[s] = rc;//插入
}

void HeapSort(HeapLine &H)
{
	int i;
	int temp;
	for (i = H.length / 2; i > 0; --i)
	{
		HeapAdjust(H, i, H.length);
	}
	for (i = H.length; i > 1; --i)
	{
		temp = H.str[i];
		H.str[i] = H.str[1];
		H.str[1] = temp;
		HeapAdjust(H, 1, i - 1);
	}
}

void Print(HeapLine &H)
{
	for (int i = 1; i <= H.length; i++)
	{
		printf("%d ", H.str[i]);
		/*if (i == 1)
		{
			printf("%d", H.str[i]);
		}
		else
		{
			printf(" %d", H.str[i]);
		}*/
	}
	printf("\n");
}
int main()
{
	int n;
	HeapLine H;
	while (scanf("%d", &n) != EOF)
	{
		CreateLine(H, n);
		HeapSort(H);
		Print(H);
		DeleteLine(H);
	}
	return 0;
}

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

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

相关文章

TMS FixInsight代码评估工具

TMS FixInsight代码评估工具 TMS Fix Insight被认为是Delphi程序员的代码评估工具&#xff0c;它也能够在Delphi的源代码中发现问题。它被认为是一个代码分析工具&#xff0c;用于划分过程以及问题的位置以及Delphi的应用。TMS Fix Insight基本上是一个静态的代码列表&#xff…

Spring - SmartInstantiationAwareBeanPostProcessor扩展接口

文章目录Preorg.springframework.beans.factory.config.SmartInstantiationAwareBeanPostProcessor类关系SmartInstantiationAwareBeanPostProcessor接口方法扩展示例Pre Spring Boot - 扩展接口一览 org.springframework.beans.factory.config.SmartInstantiationAwareBeanPo…

HTML5期末大作业:基于HTML+CSS+JavaScript仿蘑菇街购物商城设计毕业论文源码

常见网页设计作业题材有 个人、 美食、 公司、 学校、 旅游、 电商、 宠物、 电器、 茶叶、 家居、 酒店、 舞蹈、 动漫、 服装、 体育、 化妆品、 物流、 环保、 书籍、 婚纱、 游戏、 节日、 戒烟、 电影、 摄影、 文化、 家乡、 鲜花、 礼品、 汽车、 其他等网页设计题目, A…

jdk11新特性——官方的更新列表

目录一、官方的更新列表二、JEP (JDK Enhancement Proposal 特性增强提议)一、官方的更新列表 二、JEP (JDK Enhancement Proposal 特性增强提议) JShell——(java9开始支持)Dynamic Class-File Constants类文件新添的一种结构局部变量类型推断&#xff08;var关键字&#xff…

开荒手册3——构思一篇小论文

0 写在前面 又过了一个gap week&#xff0c;总算想清楚了之前遇到的一些问题&#xff0c;现在需要把之前画的大饼们一个一个消化掉。跳出来就会知道&#xff0c;总有一些something is wrong的人喜欢散播点焦虑&#xff0c;你要做的不是惩戒他们&#xff0c;而是赶紧远离&#…

windows下安装ubuntu linux子系统

windows下安装ubuntu linux子系统一、win10下安装ubuntu linux子系统二、下载ubuntu子系统三、启动ubuntu子系统四、配置ubuntu子系统一、win10下安装ubuntu linux子系统 但我们现在自己的主机上跑linux时&#xff0c;有几种选择 同时安装多个操作系统&#xff0c;每次重启电…

js 代码的运行机制

前言&#xff1a; 自己从一开始学习 javaScript 的时候&#xff0c;踩过很多很多坑&#xff0c;初学之路上也问过很多大佬许多为什么...现在回过头感叹&#xff0c;当时问的某些问题确实是有一丢丢幼稚。但是作为一个过来者&#xff0c;我深知这些问题的对于很多“后来者”来说…

tensorflow的模型持久化

参考 tensorflow的模型持久化 - 云社区 - 腾讯云 目录 1、持久化代码实现 2、持久化原理及数据格式 1、meta_info_def属性 2、graph_def属性 3、saver_def属性 4、collection_def属性 1、持久化代码实现 tensorflow提供了一个非常简单的API来保存和还原一个神经网络模型…

自主式模块化无人机设计

目 录 摘 要 I Abstract II 1 绪论 1 1.1 研究背景与意义 1 1.2 国内外研究现状 1 1.3 主要研究内容 2 2自主式模块化无人机的总体结构设计 3 2.1结构形式 3 2.2工作原理 3 2.3机架及桨叶的选择 5 2.3.1 单个桨叶空气动力分析及桨叶的选择 5 2.3.2材料的选择 6 2.3.3机架结构分…

【教学类-20-01】20221203《世界杯16强国旗》(大班)

展示效果&#xff1a; 单人使用样式&#xff1a; 多页打印样式 ​ 背景需求&#xff1a; 做《蒙德里安》格子画时&#xff0c;我把A4纸分割为正方形画框和长条纸支撑。活动中幼儿询问&#xff1a;为什么我的画站不起来&#xff1f;&#xff08;底边剪的不平整、提手太重、画…

知识直播:时代乐见搜狐的长期主义选择

国内著名商业咨询顾问刘润说&#xff1a;“所有伟大的机会都源自于巨大的结构性改变。大成就背后&#xff0c;一定有涌动的、因商业逻辑巨变而释放出来的红利。” 这话用在当前的互联网行业身上再好不过。面对重重不确定性&#xff0c;如何拨开迷雾&#xff0c;看懂市场趋势&a…

HTTP到底是什么?

文章目录HTTP简介HTTP协议的特点1) 简单快速2) 灵活3) 无连接4) 无状态HTTP协议的发展历程1) HTTP/0.92) HTTP/1.03) HTTP/1.14) HTTP/2.0HTTP的工作流程HTTP简介 HTTP 全称为 Hypertext Transfer Protocol&#xff0c;翻译为中文是“超文本传输协议”的意思&#xff0c;它是互…

Java并发编程—volatile

文章目录volatile的应用volatile的定义与实现原理专业术语&#xff1a;volatile是如何来保证可见性的呢&#xff1f;volatile的原理&#xff1a;volatile的两条实现原则&#xff1a;&#xff08;物理上如何实施&#xff09;volatile的内存语义volatile的特性例&#xff1a;下面…

SpringBoot -集成Druid

文章目录Druid概述使用问题解决Spring监控不生效方式1&#xff1a;修改yml的配置写法方式2&#xff1a;参考DruidSpringAopConfiguration自行注入Bean&#xff0c;灵活&#xff08;更建议&#xff09;Druid 概述 官网&#xff1a; https://github.com/alibaba/druid   文档&a…

校园论坛(Java)—— 用户管理系统模块

校园论坛&#xff08;Java&#xff09;—— 用户管理系统模块 文章目录校园论坛&#xff08;Java&#xff09;—— 用户管理系统模块[toc]1、写在前面2、系统结构设计2.1 各个页面之间的调用关系2.2. 用户管理系统模块各层的设计3、管理员管理用户功能3.1 管理员查看普通用户的…

微服务框架 SpringCloud微服务架构 10 使用Docker 10.1 镜像命令

微服务框架 【SpringCloudRabbitMQDockerRedis搜索分布式&#xff0c;系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】 SpringCloud微服务架构 文章目录微服务框架SpringCloud微服务架构10 使用Docker10.1 镜像命令10.1.1 镜像相关命令10.1.2 镜像操作命令10.1.…

SpringBoot_整合PageHelper

分页插件/PageHelper插件 我们在正常的查询业务之中,只需要加上一行代码就可以实现分页的数据的封装处理 实现原理 PageHelper方法使用了静态的ThreadLocal参数&#xff0c;分页参数和线程是绑定的。内部流程是ThreadLocal中设置了分页参数&#xff08;pageIndex&#xff0c…

TypeScript21(装饰器Decorator)

Decorator 装饰器是一项实验性特性&#xff0c;在未来的版本中可能会发生改变 不仅增加了代码的可读性&#xff0c;清晰地表达了意图&#xff0c;而且提供一种方便的手段&#xff0c;增加或修改类的功能&#xff1b; 若要启用实验性的装饰器特性&#xff0c;你必须在命令行或…

计算机网络 HTTPS

HTTPS HTTPS &#xff08;全称&#xff1a;Hypertext Transfer Protocol Secure &#xff09;&#xff0c;是以安全为目标的 HTTP 通道&#xff0c;在HTTP的基础上通过传输加密和身份认证保证了传输过程的安全性 。HTTPS 在HTTP 的基础下加入SSL&#xff0c;HTTPS 的安全基础是…

git:多分支管理

多分支管理1. 列出分支2. 新建分支3. 删除分支4. 切换分支5. 分支合并多分支开发的特点 | 作用1. 测试&#xff1a;合并之后再在分支中工作是否主分支里面的相同文件不会更改2. 测试&#xff1a;修改编辑test分支的文件&#xff0c;最后再合并分支&#xff0c;是否是直接覆盖&a…