6.2排序——选择排序与堆排序

news2024/9/23 21:18:30

本篇博客梳理选择排序,包括直接选择排序与堆排序
排序全部默认排成升序

一、直接选择排序

1.算法思想

每次遍历都选出最小的和最大的,放到序列最前面/最后面

2.具体操作

(1)单趟

每次遍历都选出最小的和最大的。遍历时,遇到更小的,更新min,遇到更大的,更新max

(2)单趟变整体

每趟遍历完之后,begin++,end–
程序结构如下

while(begin<end)
{
	//遍历后,最小的放到begin处,最大的放到end处;
	begin++;
	end--;
}

(3)具体代码实现

void SelectSort(int* a, int n)
{
	int begin = 0;
	int end = n - 1;
	while (begin < end)
	{
		int max = begin;
		int min = end;
		for (int i = begin + 1; i <= end; i++)
		{
			if (a[i] > a[max])
				max = i;
			if (a[i] <= a[min])
				min = i;

		}
		Swap(&a[begin], &a[min]);
		Swap(&a[end], &a[max]);
		begin++;
		end--;
	}
}

可能很多人首先会想到这么写,但测试一下会发现有bug
拿一个这样子的数组来看:

int a[10] = { 9,2,5,7,4,8,6,3,5,1 };

测试结果
来分析一下为啥会有这个bug
bug图示
因此需要对max==begin的情况单独进行修正

void SelectSort(int* a, int n)
{
	int begin = 0;
	int end = n - 1;
	while (begin < end)
	{
		int max = begin;
		int min = end;
		for (int i = begin + 1; i <= end; i++)
		{
			if (a[i] > a[max])
				max = i;
			if (a[i] <= a[min])
				min = i;

		}
		//问题已找到,此为优化版写法
		Swap(&a[begin], &a[min]);//当max==begin时,此交换操作会导致
		//max指向错误的值,需要在下面if判断加以修正
		if (max == begin)
			max = min;
		Swap(&a[end], &a[max]);
		begin++;
		end--;
	}
}

3.特性总结

(1)效率不是很好,实际中很少使用
(2)时间复杂度:o(N²)
(3)空间复杂度:o(1)
(4)稳定性:不稳定

二、堆排序(见5.2二叉树中的堆排序,此处略)

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

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

相关文章

Opencv中的直方图(1)计算反向投影直方图函数calcBackProject()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 计算直方图的反向投影。 cv::calcBackProject 函数计算直方图的反向投影。也就是说&#xff0c;类似于 calcHist&#xff0c;在每个位置 (x, y)…

主流的3D模型格式有什么区别?

主流的3D模型格式在多个方面存在区别&#xff0c;这些区别主要体现在格式的特点、支持的功能、使用场景以及兼容性等方面。51建模网支持持obj、fbx、stl、glb、gltf、dae、3ds模型格式上传展示。以下是对几种主流3D模型格式的区别进行的详细分析&#xff1a; 1. OBJ格式 特点&…

初始JESD204B高速接口协议(JESD204B一)

本文参考 B B B站尤老师 J E S D 204 B JESD204B JESD204B视频&#xff0c;图片来自 J E S D JESD JESD手册或者 A D I / T I ADI/TI ADI/TI官方文档。 1、对比 L V D S LVDS LVDS与 J E S D 204 JESD204 JESD204 J E S D 204 B JESD204B JESD204B是逻辑器件和高速 A D C / D …

【YashanDB知识库】修改字段长度后,jdbc驱动接口报YAS-04007 Message:result set metadata changed异常

问题现象 yashandb修改表的字段长度后&#xff0c;客户的业务接口报YAS-04007异常&#xff0c;截图如下: 问题的风险及影响 客户的业务在访问yashandb时异常出错&#xff0c;影响使用 问题影响的版本 所有的yashandb版本 问题发生原因 使用jdbc接口获取PreparedStatement…

库存盘点频出错?试试这款专业软件的库存分析报表工具

在企业的日常运营中&#xff0c;库存管理的实际操作直接影响到我们的工作效率和企业的整体盈利情况。库存不仅是企业的物资储备&#xff0c;更是我们每天工作中必须处理的关键环节。如果库存管理不到位&#xff0c;可能会导致产品积压、资金占用&#xff0c;甚至影响到销售和客…

数据仓库技术选型方案文档

关联博客&#xff1a; 数据仓库技术选型方案文档 Flink CDC MySQL数据同步到Doris表同步配置生成工具类 新版报表系统&#xff08;明细报表、看板、数据大屏&#xff09;方案&介绍 文章目录 数据仓库技术选型背景现状现状架构目标架构业务反馈&痛点问题&#xff1a;原因…

算法训练营——day4螺旋矩阵

1 螺旋矩阵II-力扣59&#xff08;中等&#xff09; 1.1 题目&#xff1a;螺旋矩阵II 给你一个正整数 n &#xff0c;生成一个包含 1 到 n2 所有元素&#xff0c;且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。 示例 1&#xff1a; 输入&#xff1a;n 3 输出&…

微深节能 平板小车运动监测与控制系统 格雷母线

微深节能的平板小车运动监测与控制系统中的格雷母线&#xff0c;是一种高精度、非接触式的位移测量系统&#xff0c;它在平板小车的运动监测与控制中发挥着核心作用。 一、系统概述 微深节能的平板小车运动监测与控制系统通过集成格雷母线定位系统&#xff0c;实现了对平板小车…

民营火箭公司「星际荣耀」宣布完成7亿元人民币C轮及C+轮融资

近日&#xff0c;北京星际荣耀空间科技股份有限公司&#xff08;以下简称“星际荣耀”&#xff09;完成 7 亿元人民币 C 轮及 C 轮融资&#xff0c;分别由新鼎资本和四川产业振兴基金投资集团有限公司领投&#xff08;以下简称“四川产业基金”&#xff09;&#xff0c;京铭资本…

项目管理:在职场,一定要谨记这5句话

项目管理中&#xff0c;高效、有序地推进项目是每个项目经理追求的目标。为了达成这一目标&#xff0c;这五句话值得我们深深铭记&#xff1a; 一、明确目标&#xff0c;方向引领行动 明确的目标是成功的第一步&#xff0c;在项目管理中&#xff0c;这句话尤为重要。 一个清…

揭秘中国企业GPU采购背后的技术驱动力:中国移动引领国内算力市场发展

引言 随着人工智能&#xff08;AI&#xff09;和大数据的快速发展&#xff0c;GPU&#xff08;图形处理单元&#xff09;成为了全球高性能计算市场的核心技术之一。在这一背景下&#xff0c;英伟达的显卡以其强大的计算能力在全球市场中备受青睐&#xff0c;尤其是在数据中心和…

python画图|并列直方图绘制

前述学习过程中&#xff0c;已经知晓普通直方图绘制和堆叠直方图绘制&#xff0c;参考链接如下&#xff1a; 西猫雷婶-CSDN博客 有时候&#xff0c;我们还会遇到并列直方图绘制的需求&#xff0c;今天就探索一下。 【1】官网教程 按照惯例&#xff0c;我们先来到官网&#…

vue3有了解过吗?和vue2的区别

vue3介绍 &#x1f355;&#x1f355;&#x1f355;关于vue3的重构背景&#xff0c;作者是这样说的&#xff1a; 「Vue 新版本的理念成型于 2018 年末&#xff0c;当时 Vue 2 的代码库已经有两岁半了。比起通用软件的生命周期来这好像也没那么久&#xff0c;但在这段时期&…

资源第一篇 =》bundle包

简介 bundle包主要用于游戏资源的模块化功能&#xff0c;以便更好的管理游戏资源、优化游戏资源的加载、优化游戏包体的大小&#xff0c;提高游戏体验。我们可以根据实际的场景&#xff0c;把游戏资源进行合理的分包。 bundle类型 cocos包分为内置bundle和自定义bundle。 内…

七、装饰器模式

装饰器模式&#xff08;Decorator Pattern&#xff09;是一种结构型设计模式&#xff0c;允许在不改变对象自身的情况下&#xff0c;动态地向对象添加新功能。它通过将功能附加到对象的方式来增强其行为&#xff0c;提供了一种灵活的替代方案来使用子类扩展功能。 主要组成部分…

python 检测端口是否开放

python的socket库可以检测端口是否开放。 import socket; sock socket.socket(socket.AF_INET, socket.SOCK_STREAM) result sock.connect_ex((127.0.0.1,80)) if result 0:print "Port is open" else:print "Port is not open" 这里sock.connect_ex()方…

机器人领域顶刊TRO最受欢迎的TOP 50文章盘点

介绍 众所周知&#xff0c;TRO是机器人领域的绝对顶刊&#xff0c;每一篇文章都是质量极高的。最近在看TRO官网的时候&#xff0c;发现官网给出了在TRO发布文章中最收欢迎的TOP 50 paper list。下面来看看都有哪些文章&#xff1f;是不是和您想的一样&#xff1f;下面文章的顺…

Ollama—87.4k star 的开源大模型服务框架!!

这一年来&#xff0c;AI 发展的越来越快&#xff0c;大模型使用的门槛也越来越低&#xff0c;每个人都可以在自己的本地运行大模型。今天再给大家介绍一个最厉害的开源大模型服务框架——ollama。 项目介绍 Ollama 是一个开源的大语言模型&#xff08;LLM&#xff09;服务工具…

【redis】认识redis和分布式系统

文章目录 认识 redisredis 的主要功能实现数据库实现缓存实现消息中间件 分布式系统单机架构为什么数据多了主机就难以应对 &#xff1f;分布式系统 认识 redis redis 的主要功能 用来在内存中存储数据 定义变量不就是在内存中存储数据吗&#xff1f;为什么还需要 redis 来向…

如何看待AI技术对人们生活的影响?

人工智能&#xff08;AI&#xff09;技术对人们生活的影响是多方面的&#xff0c;既有积极的一面&#xff0c;也存在一些需要关注的问题。以下是对AI技术在生活中影响的综合看法&#xff1a; 积极影响&#xff1a; 提高效率&#xff1a;AI技术在各行各业中的应用大大提高了工作…