数据结构——排序(5)

news2024/9/26 5:18:12

作者:几冬雪来  

时间:2023年4月14日

内容:数据结构排序内容讲解

目录

前言: 

1.非递归归并排序:

2.越界情况: 

3.计数排序: 

结尾: 


前言: 

在上一篇博客中我们对归并排序非递归形式做了一个大致的讲解,并且搭构了它的大概框架,但是我们非递归形式的归并排序有许多的陷阱在,而今天我们就要将其进行完善。

1.非递归归并排序:

在上一篇博客中我们大概的搭建了非递归归并排序的大概框架,现在我们将代码再次放出来并对它进行一个运行

  

在这里我们输入的依旧是8个数,然后我们来看看运行的结果是什么? 

从这里我们可以看出来在8个数的时候,我们的归并排序非递归形式成功的帮助我们进行排序了,但是如果在这里我们数组的大小不为2的n次方的时候,这个时候会发生什么事情呢?我们将数组的个数上升到9个来试试看。 

如果换为9个数的数组,从结果上来看我们的程序很明显的崩溃了,最主要的原因就是我们的gap每次都乘等于2,导致最后发生了越界。 

2.越界情况: 

前面提到了程序崩溃是因为越界的情况。而在归并排序中,我们将我们的原数组给拆分为了两个行的数组,因此这里我们要对4个边界进行判断

接下来我们就来对我们的代码分类并进行修正。 

这就是我们修正的代码,可能会有人看不懂我们这里在干什么,没关系我们可以画一个图来对它进行一个具体的表示。 

这就是我们代码修正过后的操作。这里我们的拷贝函数的代码是在for循环语句外进行的,同样的我们还有一种方法是让拷贝代码的函数在for循环语句内进行的,前者是整个还是都归并完毕再一次性的拷贝回原函数,后者是执行一次归并结束后就拷贝一次

而如果我们要使用这种方法的话,代码也要进行一定程度的修改。

在这里就是我们另外一种的拷贝方式,因为是部分拷贝的方法,所以在这里如果end1和begin2满足条件会跳过也是可以的,我们第一种方法是需要一次性都拷贝下来的所以在这里我们不能跳过。 

这里就是我们递归排序非递归形式的修改,主要修改的就是它的越界的问题。 

3.计数排序: 

在接下来讲解的是我们的一种非比较排序法——计数排序。 

那么在这里我们的计算排序是怎么操作的呢,我们在这里给一个数组。

这就是我们的计算排序,它的原理就是选一个数组计算我们的每个元素的个数,最后再遍历和排序我们的数组就行了,这就是我们的计数排序,准确的应该叫——绝对位置映射计算。 

但是这种代码也存在着它的问题,如果这里我们数组中元素的大小都是100,102等的数,如果我们依旧从1开始开辟空间的话,前面我们1-99的空间就浪费掉了。 

所以这里我们就用另外一种方法,在这里我们用a[i] - min来计算,也就是将其放在1的位置。但是这种方法也只是解我们的一时之需罢了,而这种方法被我们叫做——相对位置映射计算

总结来说就是我们的这种方法适合:计数排序范围集中且个数不多的整形排序。并且在某些特殊场合中,它运行的十分之快。

接下来就是来书写我们的代码。

这里就是我们的计数排序的代码,但是在现实中我们的计数排序并没有被广泛的使用到,因为它的局限太多,哪怕在某种特殊情况下它的时间复杂度可以很快,但是这里却是消耗了它的空间复杂度。 

结尾: 

到这里,我们数据结构所有的排序就都学习过了,这个板块也即将完结。在上一篇博客中我们将对数据结构的排序板块的知识做一个总结,同时我们的数据结构的课程也要临近结束了。最后希望这篇博客能为大家提供帮助。

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

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

相关文章

硬件语言Verilog HDL牛客刷题day10 华W部分 和 DJ部分

1. VL63 并串转换 1.题目: 设计一个模块进行并串转换,要求每四位d输为转到一位dout输出,输出valid_in表示此时的输入有效。 2.解题思路 2.1 计数记录输出的位数。 2.2 数据 有一个延时。 2.3 思路就是 搞一个寄存器存储数据,然后…

【蓝桥系列】为什么不会「输入输出」,你一道题都做不出来?(输入输出模板)

欢迎各位旅行者,来到小蓝の蓝桥城! 全文目录 📖第一幕 「藏宝地图」 🌼 输入 🌱输入一行 🌱输入多行 🌼 输出 🌱输出 一个数 🌱输出 一维列表 🌱输出…

TCP知识

计算机网络模型 OSC(Open System Interconnect)采用分层的结构化技术,共分七层:物理层,数据链路层,网络层,传输层,会话层,表示层,应用层。 TCP/IP模型共分四层:链路层&…

干货分享 | 图解如何写出优秀的项目总结?

不论是公司,还是个人,要不断地提升,就要不断地进行总结与改进,再总结再改进,如此循环,通过不断地总结与改进,改善我们的工作方法、优化工作流程、提升工作效率。 ​这就是PDCA基本思路&#xf…

ROS 教程之 vision : 用笔记本摄像头获取图像

如何用笔记本自带的摄像头采集图像 尝试一:安装Webcam 驱动 参考 大神白巧克力亦唯心博客: 链接: ROS 教程之 vision : 用各种摄像头获取图像. sudo apt-get install git-core cd ~/catkin_ws/src #catkin_ws/src对应你自己建立的catkin工作空间…

区间动态规划

区间DP 石子合并:前缀和动态规划最长合法子序列环形石子合并石子合并 II城镇国王超级括号序列炸弹人 区间DP: 状态:区间左右端点 dp[i][j]阶段:区间长度转移:由外到内 石子合并:前缀和动态规划 问题特征&…

第3章 数据科学的5个步骤

第3章 数据科学的5个步骤 文章目录 第3章 数据科学的5个步骤3.1 数据科学简介3.2 5个步骤概览3.2.1 提出有意思的问题3.2.2 获取数据3.2.3 探索数据3.2.4 数据建模3.2.5 可视化和分享结果3.3.1 数据探索的基本问题3.3.2 数据集1:Yelp点评数据DataFrameSeries定性数据…

Steam无法载入网页 - 解决方案

前言 用户在使用Steam客户端时经常会遇到无法载入网页的情况,如下图。下文介绍解决方案。 解决方案 检查防火墙 打开Windows设置,选择更新和安全,选择Windows安全中心 - 防火墙和网络保护,如下图: 点击允许应用通…

提升业务韧性的最佳路径,亚马逊云科技帮您打开成本优化的路径

众所周知,当你想要从头开始建立一个云财务管理计划似乎是稍有难度的。因此,亚马逊云科技解构了4个云财务管理CFM原则——查看、节省、计划和运营——并分享可以实施的操作指南,帮助您在云上取得成功。 云成本管理工具 亚马逊云科技提供一系…

学生信息管理系统(student information manage system, SIMS)

一、前言 本项目为学生信息管理系统,使用C语言编写。 ★★★项目详见本人gitee仓库,地址 https://gitee.com/omnipotent-brother/student-information-manage-system.git ★★★ 二、项目介绍 开发环境: 基于windows 11系统下的Visual Studio…

SQL Server 服务器安装配置和使用

目录 一、SQL Server概述 1、SQL Server 环境需求 2、SQL Server的特点和组成 (1)SQL Server 特点 (2)SQL Server 基本组成 3、SQL Server 安装需注意 (1)数据文件的存储位置 (2&#xf…

【Visual Studio Code】编码速度提升小技巧

简言 用了这么久的vscode。在此记录下我常用的快捷键和小技巧。 小技巧 这个是vscode的工作界面。 值得一提的是,界面下边一行是快捷显示信息和快捷操作。可以快速了解打开文件的描述信息。 使用扩展 在使用vscode的时候,一定要安装相应的扩展包。 扩…

08 - 智能编程语言

一、为什么需要智能编程语言 1. 语义鸿沟 传统C/C++等是以面向通用计算的加、减、乘、除等基本标量操作为基础的,通常不具有和具体任务及应用场景相关的高层语义。例如:使用纯标量计算的C++语言编写的卷积运算包含7重循环,而采用向量语义的Python语言编写的卷积运算只需要…

PowerToys——免费、强大、高效的微软官方效率提升工具集,办公学习宝藏软件

名人说:博观而约取,厚积而薄发。——宋苏轼 Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 目录 一、简单介绍1、PowToys是什么?2、它的功能有哪些? 二、下载安装三、功能示例1、始终置顶2、…

弱算法MD5、SHA1、DES、AES CBC-修复建议

一、修复原则 修复原则上2条走: 1、新产品、新业务 不应使用弱算法,如果使用应及时修复 2、已经产品 【金融类】业务应自行根据涉及广度 排期修复 【非金融】 类,在修复难度大、涉及面广的情况下 可以暂时不修复,择机修复。 …

线程等待其他线程执行同步类CountDownLatch

文章目录 前言核心原理源码解析同步源码分析await源码分析countDown源码分析 实战演示1、创建演示代码2、创建测试用例3、测试结果演示 写在最后 前言 大家都知道多线程在我们实际编码过程中运用很多,很多情况我们需要靠多线程来提升系统性能。但是有些时候我们需要…

Flink系列-7、Flink DataSet—Sink广播变量分布式缓存累加器

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 大数据系列文章目录 官方网址:https://flink.apache.org/ 学习资料:https://flink-learning.org.cn/ 目录 数据输出Da…

图的简单处理(C/C++)

目录 1 存图方法 1.1 邻接矩阵 1.2 邻接表 1.3 链式前向星 2 树形DP 2.1 简介 2.2 例题1:公司聚会 2.3 例题2:士兵部署 2.4 例题3:强力党逗志芃 2.5 例题4:作物杂交(不确定树的结构) …

N1盒子使用U外挂HomeAssistant

目录 感谢1.准备工作2.将固件写入U盘(32G)3.将N1设为U盘启动4.将U盘插入到HDMI旁边的USB接口上5.网页打开HomeAssistant 感谢 HomeAssistant智能家居方案 配套教程 视频 源码 硬件 智能家庭HomeAssistant N1 4月全集成固件 小米米家涂鸦HASS nodered m…

Python图像处理【12】基于小波变换执行图像去噪

基于小波变换执行图像去噪 0. 前言1. 小波变换基础2. 小波变换去噪原理3. 使用 pywt 执行小波变换图像去噪4. 使用 scikit-image 执行小波变换图像去噪4.1 循环旋转技术4.2 改进图像去噪质量 小结系列链接 0. 前言 小波 (wavelets) 变换是表示和分析多分辨率图像的通用方法&am…