排序八卦炉之选择、堆排

news2024/10/7 8:29:48

文章目录

  • 1.选择排序
    • 1.1代码实现
    • 1.2复杂度
  • 2.堆排序
    • 2.1代码实现
    • 2.2复杂度

在这里插入图片描述

1.选择排序

在这里插入图片描述

1.1代码实现

// 当数据趋于有序或随机(可能部分有序) 插排更有优势 O(N)~O(N^2)
//选择排序:O(N^2)                               O(N^2)~O(N^2)
void SelectSort(int* a, int n)
{
	assert(a);
	//i:数据头 j:数据尾
	for (int i = 0, j = n - 1; i < j; ++i, --j)
	{
		//假设最大值/最小值下标为i
		int m = i, M = i;
		//遍历i后到j的所有数据 确定real_m/M
		for (int k = i + 1; k <= j; ++k)
		{
			if (a[k] < a[m])
				m = k;

			if (a[k] > a[M])
				M = k;
		}
		//小值换到数据头
		Swap(&a[i], &a[m]);
		//特殊情况需重新匹配
		if (i == M)
		{
			M = m;
		}
		//大值换到数据尾
		Swap(&a[j], &a[M]);
	}
}

1.2复杂度

在这里插入图片描述

2.堆排序

2.1代码实现

//堆排序 -- 升序建大堆 降序建小堆
void AdjustDwon(int* a, int size, int parent)
{
	//设左孩子较小
	int child = parent * 2 + 1;
	//当未达到堆末 进入循环
	while (child < size)
	{
		//确定real小孩子
		//if (child + 1 < size && a[child + 1] < a[child])  //小堆
		
		//确定real大孩子
		if (child + 1 < size && a[child + 1] > a[child])    //大堆
		{
			++child;
		}
		
		//if (a[parent] > a[child])    //小堆
		if (a[parent] < a[child])      //大堆
		{
			Swap(&a[child], &a[parent]);
			parent = child;
			child = parent * 2 + 1;
		}
		else
		{
			break;
		}
	}
}
void HeapSort(int* a, int n)
{
	//下调建大堆
	for (int i = (n - 1 - 1) / 2; i >= 0; --i)
	{
		AdjustDwon(a, n, i);
	}
	//排序
	int end = n - 1;
	while (end > 0)
	{
		Swap(&a[0], &a[end]);
		AdjustDwon(a, end, 0);
		--end;
	}
}

2.2复杂度

点击 二叉树 查看阿猿之前的博客 对堆排序进行了详细的讲解呦~

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

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

相关文章

HttpRunner自动化工具之times 重复执行

单个用例重复执行 如果想让某个测试步骤重复执行&#xff0c;可以在test 中增加times参数&#xff0c;如下: 执行效果&#xff1a; 实战案例 光学理论是没用的&#xff0c;要学会跟着一起敲&#xff0c;要动手实操&#xff0c;才能将自己的所学运用到实际当中去&#xff0c;这…

纯粹即刻,畅享音乐搜索的轻松体验

纯粹即刻&#xff0c;畅享音乐搜索的轻松体验 在当今快节奏的生活中&#xff0c;我们常常渴望一种简单而便捷的方式来探索和享受音乐。现在&#xff0c;你可以纯粹即刻地畅享音乐搜索的轻松体验。无论你是寻找热门歌曲还是探索不同风格的音乐&#xff0c;这款应用将为你带来随…

6.物联网操作系统信号量

一。信号量的概念与应用 信号量定义 FreeRTOS信号量介绍 FreeRTOS信号量工作原理 1.信号量的定义 多任务环境下使用&#xff0c;用来协调多个任务正确合理使用临界资源。 2.FreeRTOS信号量介绍 Semaphore包括Binary&#xff0c;Count&#xff0c;Mutex&#xff1b; Mutex包…

ATFX汇评:英央行利率决议来袭,大概率加息25基点

ATFX汇评&#xff1a;今日19:00&#xff0c;英国央行公布利率决议、会议纪要和货币政策报告&#xff1b;半小时后&#xff0c;英国央行行长贝利召开货币政策新闻发布会。当前英国央行基准利率5%&#xff0c;市场预期将加息25基点至5.25%&#xff0c;假若符合预期&#xff0c;则…

问道管理:沪指窄幅震荡跌0.18%,有色、汽车等板块走低

3日早盘&#xff0c;沪指盘中窄幅震动下探&#xff0c;创业板逆市上扬&#xff1b;两市半日成交不足5000亿元&#xff0c;北向资金净卖出超15亿元。 到午间收盘&#xff0c;沪指跌0.18%报3255.88点&#xff0c;深成指跌0.23%&#xff0c;创业板指涨0.2%&#xff1b;两市算计成交…

2023年一建考点速记(五大专业)

一级级建造师考点速记手册是根据历年考试的命题方向及命题规律总结而成&#xff0c;其中BI超频必考点(每年必考)&#xff0c;B2高频易考点(每2年一次)B3中频可考点(3-5年一次)&#xff0c;B4低频 BOSS 考点(超过5年一次B1涵盖卷面的40%的分值;B2涵盖卷面20%的分值;B3涵盖卷面15…

网工头疼的IP子网划分,其实就这么简单

下午好&#xff0c;我的网工朋友。 最近网工群里还是一如既往的热闹啊&#xff0c;关于行业、技术、职场的话题热议不断。 前段时间有群友在里面聊子网划分&#xff0c;有几个不懂的网工朋友&#xff0c;悄悄来私聊老杨总&#xff0c;表示想再补充一下这方面的知识。 看了眼&…

IDEA强大的VisualGC插件

前言 开发阶段实时监测&#xff0c;自己的JVM信息&#xff0c;实时可视化 Hotspot JVM 垃圾回收监控工具, 支持查看本地和远程JVM进程, 支持G1 and ZGC算法。 插件安装 在线安装 IntelliJ IDEA 可通过在线安装的方式&#xff0c;安装插件 JDK VisualGC&#xff0c;安装步骤: …

Selenium Chrome Webdriver 如何获取 Youtube 悬停文本

导语 Youtube 是一个非常流行的视频分享平台&#xff0c;有时候我们可能想要爬取一些视频的信息&#xff0c;比如标题、播放量、点赞数等。但是有些信息并不是直接显示在网页上的&#xff0c;而是需要我们将鼠标悬停在某个元素上才能看到&#xff0c;比如视频的时长、上传时间…

华为云CTS 使用场景

云审计服务 CTS 云审计服务&#xff08;Cloud Trace Service&#xff09;&#xff0c;帮助您监控并记录华为云账号的活动&#xff0c;包括通过控制台、API、开发者工具对云上产品和服务的访问和使用行为&#xff0c;提供对各种云资源操作记录的收集、存储和查询功能&#xff0…

解密Redis:应对面试中的缓存相关问题2

面试官&#xff1a;Redis集群有哪些方案&#xff0c;知道嘛&#xff1f; 候选人&#xff1a;嗯~~&#xff0c;在Redis中提供的集群方案总共有三种&#xff1a;主从复制、哨兵模式、Redis分片集群。 面试官&#xff1a;那你来介绍一下主从同步。 候选人&#xff1a;嗯&#xff…

IDEA基础使用

IDEA基础使用 1、IDEA中显示用法和用户截图展示有调用显示无调用显示 对应方法 2、如何找出项目中所有不被调用方法截图展示对应方法 3、常用代码(Code)说明及快捷键:4、未完待续待日后更新。。。总结&#xff1a;欢迎指导&#xff0c;也祝码友们代码越来越棒&#xff0c;技术越…

python版puppeteer——pyppeteerselenium的加强版——seleniumwire

目录 前言seleniumwire安装创建web driver设置代理反屏蔽修改window.navigator.webdriver关键字返回结果options追加参数 pyppeteerpuppeteer安装快速入门参数配置隐藏浏览器特征拦截请求更多文档&博客 Playwright安装快速入门新概念&#xff1a;Context页面基本操作选择器…

wolfSSL5.6.3移植至ZYNQ(XC7Z010)记录

上篇文章主要描述了如何从源工程中将configure.ac转变为configure&#xff0c;并成功使其在Ubuntu上运行&#xff0c;此篇主要描述将其移植到嵌入式arm开发板上&#xff08;在官方手册中有列举支持的硬件平台架构&#xff09;。 交叉编译 1. 解压源工程代码&#xff1b; 2.进…

XUbuntu22.04之统计屏幕使用时间activitywatch(一百八十八)

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

Node.js-http模块服务端请求与响应操作,请求报文与响应报文

简单案例创建HTTP服务端&#xff1a; // 导入 http 模块 const http require("http"); // 创建服务对象 const server http.createServer((request, response) > {// 设置编码格式&#xff0c;解决中文乱码问题response.setHeader("content-type", &…

WAF独木难支 RASP与ADR将成应用安全防护2.0时代新宠

曾几何时&#xff0c;黑客攻击大多通过网络层进行&#xff0c;但随着基于网络层的基础安全防护措施趋于严密&#xff0c;防火墙、入侵防御、防病毒等安全软硬件构建起了相对完善的防护体系&#xff0c;想再从网络层钻空子的难度增大。如今&#xff0c;黑客攻击从网络层转入Web为…

学无止境·运维高阶③(Mysqldump脚本)

Mysqldump脚本 1、详细脚本2、执行 1、详细脚本 #!/bin/bash mysql_cmd‘-uroot -pRedHat123’ exclude_db‘information_schema|performance_schema|sys’ bak_path/backup/db mysql m y s q l c m d − e ′ s h o w d a t a b a s e s ′ − N ∣ e g r e p − v " {m…

网络电视盒子哪个品牌好?2023最新性价比电视盒子排行榜

电视盒子是电视机成本最低的更新方案&#xff0c;但面对众多品牌和机型时往往不知道网络电视盒子哪个品牌好&#xff0c;踩雷的消费者非常多&#xff0c;想要小编分享电视盒子推荐&#xff0c;今天带新手们了解一下业内最新的性价比电视盒子排行榜&#xff0c;看看哪些电视盒子…

Docker 安装 Tomcat

目录 一、查看 tomcat 版本 二、拉取 Tomcat Docker 镜像 三、创建 Tomcat 容器 四、访问 Tomcat 五、停止和启动容器 一、查看 tomcat 版本 访问 tomcat 镜像库地址&#xff1a;https://hub.docker.com/_/tomcat&#xff0c;可以通过 Tags 查看其他版本的 tomcat; 二、拉…