C--四种排序方法的补充

news2024/11/22 14:45:37

上一篇文章因为时间原因只写了三种,这一篇来补充第四种,第四种的代码更多,所需要理解的也是更多的。

堆排序

想要学会堆排序,你必须了解二叉树的内容。堆排序的排序速度也是非常的快。

这里都已大堆为例

1.向上调整算法(此代码适合大堆)

/*向上调整算法*/
void xiangshang(int *a,int child)
{
	int parent = (child - 1) / 2;
	while (child > 0)
	{
		if (a[parent] < a[child])
		{
			int c;
			c = a[parent];
			a[parent] = a[child];
			a[child] = c;
		}
		/*else
		{
			break;
		}*/
		child = parent;
		parent = (child - 1) / 2;
	}
}

(想要不屏蔽掉这个else的前提是这个二叉树已经建好了大堆,否则会出现错误。) 

我们可以通过这个图来理解(这里我已经建好了大堆)

【应该知道的小常识:父亲节点=(子节点-1)/2】 

     这里我在最后插入了11,那么11就会与他的父亲节点也就是6进行比较,如果子节点比父亲节点大的话,就会进行交换,一直到父亲节点比11大或者11一直交换到根才停止。

     while循环的结束条件是child>0的原因:假设你插入的数字会一直比较到根节点,并且比根节点还大,那么在最后一次循环开始,parent是为0的,而child为1或2,那么在这次循环结束后child会变成0,parent也为0,没有比较的必要了。

     这里可能有人写child>=0,这个也是成立的,只不过他的退出循环是因为else来退出的循环

当然你要进行堆排序的时候就别写这个了

2.建堆

/*建堆*/
void jiandui(int *b,int n)
{
	for (int i = 0; i < n; i++)
	{
		xiangshang(b, i);
	}
}

这里我运用循环,你每次传一个数值,我便通过一次向上调整来形成大堆 

 

3.向下调整算法

/*向下调整算法*/
void xiangxia(int* a,int n,int parent)
{
	int child = parent * 2 + 1;
	while (child < n)
	{
		if ((child + 1) < n && a[child + 1] > a[child])
		{
			child++;
		}
		if (a[child] > a[parent])
		{
			int c;
			c = a[child];
			a[child] = a[parent];
			a[parent] = c;
		}
		parent = child;
		child = parent * 2 + 1;
	}
}

【需要记住中左child=2*parent+1,右child=2*parent+2】 

 

  在这里我先假设child为左边的,让左右孩子比较,这是如果右边大,child++会使得child为右孩子。在与父亲比较进行比较。

4.堆排序

void duipaixu(int* a, int n)
{
	int end = n-1;
	jiandui(a, n);
	while (end)
	{
		int c;
		c = a[0];
		a[0] = a[end];
		a[end] = c;
		end--;
		xiangxia(a, end, 0);
	}
	
}

   我先通过jiandui函数来建立大堆,这样便是最大的值,让最后一个叶子节点进行交换,这时最后一个是最大的值,让end--,是为了不让下面代码的向下调整算法对我刚调整的最大值改变位置,然后用向下调整算法找到第二大的数放在了根的位置,然后交换位置后,倒数第二个便是倒数第二个最大的,依次进行,那么在数组中就会形成升序。

 

 

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

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

相关文章

JavaWeb - Spring Boot

Spring 官网​​​​​Spring | Home Spring Boot Spring Boot是一个由Pivotal团队提供的开源框架&#xff0c;旨在简化Spring应用的初始搭建以及开发过程。在Spring Boot项目中&#xff0c;通常会有Controller、Service、Mapper和Entity等层次结构。下面将详细介绍这些层次的…

Mac 安装Hadoop教程

1. 引言 本教程旨在介绍在Mac 电脑上安装Hadoop&#xff0c;便于编程开发人员对大数据技术的熟悉和掌握。 2.前提条件 2.1 安装JDK 想要在你的Mac电脑上安装Hadoop&#xff0c;你必须首先安装JDK。具体安装步骤这里就不详细描述了。你可参考Mac 下载JDK8。 2.2 配置ssh环境…

三分钟讲明白怎么用Fusion360和3D打印做模具

前言 模具&#xff0c;这东西听起来好像很常见&#xff0c;但是听到价格又很高大上&#xff0c;但是现在好消息是你可以在家里用3D打印方式实现一个模具&#xff0c;虽然是一个学习级的简易模具但是符合模具的9成要素 这里我们设计一个可以把热熔胶变成实物的模具 如何实现 1首…

生成密码c++

需求 目前需要实现生成8位密码&#xff0c;密码要求至少包含一位数字&#xff0c;一位大写字母&#xff0c;一位小写字母&#xff0c;一位特殊字符。如果用户第一次使用还没有输入密码&#xff0c;密码则为系统随机生成。 用户输入密码&#xff0c;符合规则则将默认密码覆盖掉…

重生之我们在ES顶端相遇第10 章- 分分分词器的基本使用

文章目录 思维导图0. 前言1. 光速上手1.1 指定分词器1.2 测试分词器 2. 分词流程(重要)2.1 基本介绍2.2 深入如何测试分词器 3. 自定义一个简单的分词器 思维导图 0. 前言 分词器在 ES 搜索使用中非常关键&#xff0c;一个好的分词器能够提高搜索的质量&#xff0c;让用户搜索…

进程间的通信(无名管道)

进程间通信 IPC InterProcess Communication 1.进程间通信方式 1.早期的进程间通信&#xff1a; 无名管道(pipe)、有名管道(fifo)、信号(signal) 2.system V PIC&#xff1a; 共享内存(share memory)、信号灯集(semaphore)、消息队列(message queue) 3.BSD: 套接字(socket) 2.无…

AI壁纸套装,单月变现7000+,手把手教你,别说你还不会

介绍 这种类型的手机壁纸&#xff0c;平板壁纸&#xff0c;电脑壁纸&#xff0c;甚至是手表壁纸&#xff0c;流量都很不错&#xff0c;尤其是深受一些女性的喜欢。 变现能力也不错&#xff0c;而且变现方式也多种多样。 今天就一步一步的教大家如何制作这种壁纸&#xff0c;怕…

本地部署 Flux.1 最强文生图大模型!Comfyui 一键安装

前言 最近&#xff0c;由前 Stability AI员工创立的黑森林实验室推出了开源文生图大模型–FLUX.1横空出世。 FLUX.1在文字生成、复杂指令遵循和人手生成上具备优势。以下是其生成图像示例&#xff0c;可以看到即使是生成大段的文字、多个人物&#xff0c;也没有出现字符、人手…

涉案财物管理系统|涉案财物全流程监测

涉案财物管理系统DW-S405系统基于物联网技术规范涉案财物管理流程&#xff0c;确保涉案财物的安全性、完整性和合法性&#xff1b;可以提高办案效率&#xff0c;减少办案成本&#xff0c;实现资源共享。 DW-S405可以深度整合大平台和物理存储区的整体一致性&#xff0c;实现对…

通信算法之229: 通信系统中的Eb/N0与SNR

通信系统中接收灵敏度是衡量系统可接收的最小信号电平。各个文章书籍中都给了接收灵敏度与SNR的关系。 但是做解调算法的工程师却在乎的是Eb/No&#xff0c;那么两者的关系什么&#xff1f;是不是都可以代表接收性能的好坏&#xff1f; Eb/No 在通信系统中&#xff0c;Eb/No 是…

带娃赚钱两不误,用AI做故事绘本,零成本轻松变现

01 利用Chatgpt生成故事脚本内容 AI Breakthroug 这一步我们可以将收集的爆款故事文案给到GPT进行改写&#xff0c;这里我重点展示如何通过提示词让GPT帮我们生成原创的故事脚本。 *▍**让GPT生成原创故事标题* 一开始不知道写什么主题故事的时候&#xff0c;这里我们可以…

报错:java: 不再支持源选项 5。请使用 8 或更高版本

Date: 2024.08.30 13:52:20 author: lijianzhan 电脑环境&#xff1a;Windows10 开发环境&#xff1a;JDK21 代码工具&#xff1a;IntelliJ IDEA 2024 一、问题 运行脚本控制台报错&#xff1a;java: 不再支持源选项 5。请使用 8 或更高版本。 二、原因 当前JDK版本比较高&…

【MySQL索引】4索引优化

索引优化 1 关联查询优化 左连接LEFT JOIN LEFT JOIN 右边是我们的关键点,一定需要建立索引 .这里是book的card 字段&#xff0c;type建不建索引无所谓。 ALTER TABLE book ADD INDEX Y ( card); #【被驱动表】&#xff0c;可以避免全表扫描 EXPLAIN SELECT SQL_NO_CACHE *…

2.5G网络(通常指2.5G以太网,即2500BASE-X)的网络变压器在设计和应用上有几个关键方面

信号传输和接收&#xff1a; 2.5G网络变压器主要用于以太网设备中&#xff0c;用于将信号从平衡转换为非平衡&#xff0c;或者进行阻抗匹配&#xff0c;确保信号能够在传输线和接收器之间有效地传输和接收。 频率范围&#xff1a; 这些变压器需要支持2.5G以太网的频率范围&…

Java 入门指南:Java 并发编程 —— 两万字详解 进程(Process)与线程(Thread)

线程和进程是操作系统中两个重要的概念&#xff0c;用于实现并发执行和多任务处理。 基础概念 进程 进程&#xff08;Process&#xff09;&#xff1a;进程是计算机中正在运行的程序的实例。它是操作系统分配系统资源的基本单位&#xff0c;包括程序代码、数据、打开的文件、…

Global Illumination_LPV Deep Optimizations

接上回&#xff0c;RSM优化技术介绍后&#xff0c;我们本部分主要看一下&#xff0c;光栅GI三部曲中的LPV&#xff0c;这个算法算是很巧妙了&#xff0c;算法思路基于RSM上拓展到世界空间&#xff0c;可以说很具学习和思考价值&#xff0c;之前也简单实现过Global Illumination…

【 html+css 绚丽Loading 】000028 九宫幻明轮

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享htmlcss 绚丽Loading&#xff01;并提供具体代码帮助大家深入理解&#xff0c;彻底掌握&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495…

AI智能导诊小程序源码,在智能导诊系统中,自然语言处理技术的运用

概述 智能导诊基于医疗 AI 、自然语言处理技术&#xff0c;推出的在线导医分诊智能工具&#xff0c;覆盖导诊、智能问答、科普宣教等就医服务&#xff1b;智能导诊通过人体图、症状列表等形式进行疾病自测&#xff0c;快速推荐就诊科室、医生推荐。产品可应用于微信线上挂号、…

SQLi-LABS通关攻略【51-55关】

SQLi-LABS 51关 51关和50关一样&#xff0c;只是改为了单引号闭合 依旧有报错信息&#xff0c;可以使用报错注入 构造payload,得到数据库名 ?sort1 and updatexml(1,concat(1,database()),1)-- SQLi-LABS 52关 52关和50关一样&#xff0c;但是没有报错信息&#xff0c;所以报…

智慧监管:地理信息与遥感技术驱动下的社会治理新纪元

在信息化浪潮席卷全球的今天&#xff0c;智慧监管已成为推动社会治理现代化的关键力量。本文将深入剖析智慧监管的概念、技术基础、应用场景及其对社会发展的深远影响&#xff0c;探讨如何在新时代背景下&#xff0c;利用地理信息与遥感技术构建更加智慧、高效的监管体系。 智…