排序的本质、数据类型及算法选择
排序的本质、数据类型及算法选择
- 一、排序的本质
- 二、排序的数据类型
- 三、排序算法的选择依据
前两天老金写了篇 “十大排序简介”,有点意犹未尽,这一回老金想把排序连根拔起,从排序的本质说道说道。
一、排序的本质
从字面上理解,排序就是把一堆乱糟糟的东西按照一定的规则排得整整齐齐,使无序变有序。
人喜欢有序,但大自然是喜欢无序的。
排序一词的英文是sort,这个词本来是“分类”的意思。分类是将相似的东西分到一起,表面上看和排序貌似没什么关系,实际上大多数分类都是有序的。
比如,东汉末年分三国,为什么人们都是说魏蜀吴,而不说蜀吴魏?
因为有了人,世间的一切都有了价,有了价便是有了等级。
所谓的排序,本质上就是划分等级。
对于编程来讲,排序就是将数字按从小到大的顺序排列。
没错,无论排什么,最终本质上排的都是数字。
如果把数字看成长短不一的仙人板板,那么,排序前:

排序后:

是不是赏心悦目好多?
二、排序的数据类型
常见的用于排序的数据类型有:
1. 数字排序
不要多说,不要多问。这是最基本的排序类型,包括整数、浮点数等。
2. 字符串排序
按字母顺序对单词或句子进行排序,看着是字母,实际上排的是ASCII码,而ASCII码就是数字。
3. 日期和时间排序
要将日期和时间转换为可比较的数值形式,然后进行排序。
4. 多维数据排序
包含多个属性的数据,可能需要根据一个或多个属性进行排序。例如,学生的成绩,可以以总成绩为主关键字、以单科成绩为次关键字一起排序。
5. 特殊类型数据排序
如地理坐标(经纬度)、版本号(如软件版本号)、IP地址等,它们也有特定的排序规则。
三、排序算法的选择依据
排序算法一上来就10种,为啥要这么多呢?因为没有一种万能的算法能够解决所有问题。
软件工程先天具有复杂性,计算机的世界里有一句名言:
No Silver Bullet in Software Engineering。
幻想一炮就能解决所有问题是不可能的。
排序算法的选择在实际应用中至关重要,因为它直接影响到程序的性能和效率。选择依据如下:
1. 数据规模
如果数据规模很小(比如几十个元素),可以任性一点,选择简单好写的排序算法(比如冒泡排序、选择排序、插入排序)。如果数据规模很大(比如几万、几十万甚至更多个元素),就应选择效率更高的算法(比如快速排序、归并排序)。
2. 算法稳定性
有时,即便两个元素完全相同,排序时也需要保持其原始顺序,这个就叫排序算法的稳定性。比如800对新人的集体婚礼,男方有790人都叫王小二,现在按人名排序出场,如果你把这790个新郎官的次序搞乱了,那妹子们可要几家欢喜几家愁了。如果新娘里有女侠郭芙蓉,势必送你一招“排山倒海”。

稳定的排序算法有:冒泡排序、插入排序、归并排序、计数排序、桶排序、基数排序。
3. 空间复杂度
有些嵌入式系统的内存空间有限,应选择空间复杂度低的算法(比如快速排序、堆排序或插入排序)。
如智能手表为了降低成本、减小体积,内存就比较有限。在智能手表中,需要按时间顺序对心率、步数、睡眠质量等健康数据进行排序,这时候就可以考虑空间复杂度低的排序算法。
4. 数据有序性
如果数据已经有一定的顺序,那插入排序和希尔排序就是比较好的选择。它们能够利用已有的有序序列,减少比较和交换的次数,从而提高效率。
如果数据完全无序,可以选择那些不依赖于数据初始状态的排序算法,比如快速排序和归并排序。
相关文章:
排序的本质、数据类型及算法选择
排序的本质、数据类型及算法选择 一、排序的本质二、排序的数据类型三、排序算法的选择依据 前两天老金写了篇 “十大排序简介”,有点意犹未尽,这一回老金想把排序连根拔起,从排序的本质说道说道。 一、排序的本质 从字面上理解,…...
Python的列表基础知识点(超详细流程)
目录 一、环境搭建 二、列表 2.1 详情 2.2 列表定义 2.3 列表长度 2.4 列表索引 2.5 切片索引 2.6 添加 2.7 插入 2.8 剔除 2.8.1 pop方法 2.8.2 del方法 2.9 任何数据类型 2.10 拼接 2.10.1 “” 2.10.2 “*” 2.11 逆序 编辑 2.12 计算出现次数 2.13 排序…...
HarmonyOS鸿蒙开发 弹窗及加载中指示器HUD功能实现
HarmonyOS鸿蒙开发 弹窗及加载中指示器HUD功能实现 最近在学习鸿蒙开发过程中,阅读了官方文档,在之前做flutter时候,经常使用overlay,使用OverlayEntry加入到overlayState来做添加悬浮按钮、提示弹窗、加载中指示器、加载失败的t…...
【Ubuntu与Linux操作系统:一、Ubuntu安装与基本使用】
第1章 Ubuntu安装与基本使用 1.1 Linux与Ubuntu Linux是一种开源、类Unix操作系统内核,拥有高稳定性和强大的网络功能。由于其开源性和灵活性,Linux被广泛应用于服务器、嵌入式设备以及桌面环境中。 Ubuntu是基于Debian的一个流行Linux发行版…...
React 元素渲染
React 元素渲染 React 是一个用于构建用户界面的 JavaScript 库,它允许开发人员创建大型应用程序,这些应用程序可以随着时间的推移而高效地更新和渲染。React 的核心概念之一是元素渲染,它描述了如何将 JavaScript 对象转换为 DOM࿰…...
【2024年华为OD机试】 (C卷,100分)- 括号匹配(Java JS PythonC/C++)
一、问题描述 题目描述 给定一个字符串,里边可能包含“()”、“[]”、“{}”三种括号,请编写程序检查该字符串中的括号是否成对出现,且嵌套关系正确。 若括号成对出现且嵌套关系正确,或该字符串中无括号字符,输出&am…...
解锁企业数字化转型新力量:OpenCoze(开源扣子)
在当今数字化浪潮席卷之下,企业对于高效管理和协同运作的需求愈发迫切,而开源技术正逐渐成为众多企业破局的关键利器。今天,想给大家介绍一款极具潜力的开源项目 ——OpenCoze,中文名称 “开源扣子”。 一、OpenCoze 是什么&…...
【网络云SRE运维开发】2025第2周-每日【2025/01/12】小测-【第12章 rip路由协议】理论和实操考试题解析
文章目录 选择题答案及解析理论题答案及解析实操题答案及解析下一步进阶 选择题答案及解析 RIP路由协议是基于哪种算法的动态路由协议? 答案:B. 距离矢量算法解析:链路状态算法用于OSPF等协议;最小生成树算法主要用于生成树协议&…...
【微服务】8、分布式事务 ( XA 和 AT )
文章目录 利用Seata解决分布式事务问题(XA模式)AT模式1. AT模式原理引入2. AT模式执行流程与XA模式对比3. AT模式性能优势及潜在问题4. AT模式数据一致性解决方案5. AT模式一阶段操作总结6. AT模式二阶段操作分析7. AT模式整体特点8. AT模式与XA模式对比…...
CVE-2025-22777 (CVSS 9.8):WordPress | GiveWP 插件的严重漏洞
漏洞描述 GiveWP 插件中发现了一个严重漏洞,该插件是 WordPress 最广泛使用的在线捐赠和筹款工具之一。该漏洞的编号为 CVE-2025-22777,CVSS 评分为 9.8,表明其严重性。 GiveWP 插件拥有超过 100,000 个活跃安装,为全球无数捐赠平…...
TypeScript Jest 单元测试 搭建
NPM TypeScript 项目搭建 创建目录 mkdir mockprojectcd mockproject初始化NPM项目 npm init -y安装TypeScript npm i -D typescript使用VSCode 打开项目 创建TS配置文件tsconfig.json {"compilerOptions": {"target": "es5","module&…...
基于 SSH 的任务调度系统
文末附有完整项目代码 在当今科技飞速发展的时代,任务调度系统的重要性日益凸显。本文将详细介绍一个基于 SSH(SpringStruts2Hibernate)的任务调度系统的设计与实现。 一、系统概述 本系统旨在改变传统人工任务调度方式,通过计算…...
filestream安装使用全套+filebeat的模块用法
1 filestream介绍 官方宣布:输入类型为log在filebeat7.16版本已经弃用了 Filestream 是 Filebeat 中的一种 输入类型(Input),用于处理日志文件的读取。它是为了取代 Filebeat 中传统的 log 输入(Input)设…...
java项目之房屋租赁系统源码(springboot+mysql+vue)
项目简介 房屋租赁系统实现了以下功能: 房屋租赁系统的主要使用者分为: 系统管理:个人中心、房屋信息管理、预约看房管理、合同信息管理、房屋报修管理、维修处理管理、房屋评价管理等模块的查看及相应操作; 房屋信息管理&#…...
sap mm学习笔记
1. 业务流程 2. 组织架构 3. 物料主数据 4.采购主数据 5. 采购管理 6. 库存管理 7.物料主数据 8. 采购申请 ME51N...
代码随想录_链表
代码随想录02 链表 203.移除链表元素 力扣题目链接(opens new window) 题意:删除链表中等于给定值 val 的所有节点。 示例 1: 输入:head [1,2,6,3,4,5,6], val 6 输出:[1,2,3,4,5] 示例 2: 输入:he…...
EF Code 并发控制
【悲观控制】 不推荐用,EF Core 没有封装悲观并发控制的使用,需要使用原生Sql来使用悲观并发控制 一般使用行锁、表锁等排他锁对资源进行锁定,同时只有一个使用者操作被锁定的资源 拿sql server举例,可以使用表所、或者行所解决…...
ceph fs status 输出详解
ceph fs status 命令用于显示 Ceph 文件系统的状态信息,其中各列的含义如下: RANK:元数据服务器(MDS)的等级或标识符。 STATE:MDS 的当前状态,例如 active(活跃)、stan…...
FFmpeg Muxer HLS
使用FFmpeg命令来研究它对HLS协议的支持程度是最好的方法: ffmpeg -h muxerhls Muxer HLS Muxer hls [Apple HTTP Live Streaming]:Common extensions: m3u8.Default video codec: h264.Default audio codec: aac.Default subtitle codec: webvtt. 这里面告诉我…...
如何用SQL语句来查询表或索引的行存/列存存储方式|OceanBase 用户问题集锦
一、问题背景 自OceanBase 4.3.0版本起,支持了列存引擎,允许表和索引以行存、纯列存或行列冗余的形式创建,且这些存储方式可以自由组合。除了使用 show create table命令来查看表和索引的存储类型外,也有用户询问如何通过SQL语句…...
智能磁盘清理引擎:基于Windows Cleaner的系统空间优化解决方案
智能磁盘清理引擎:基于Windows Cleaner的系统空间优化解决方案 【免费下载链接】WindowsCleaner Windows Cleaner——专治C盘爆红及各种不服! 项目地址: https://gitcode.com/gh_mirrors/wi/WindowsCleaner 在数字化办公环境中,系统磁…...
AI编程助手Cursor Pro功能扩展指南:开源解决方案实现开发效率提升
AI编程助手Cursor Pro功能扩展指南:开源解决方案实现开发效率提升 【免费下载链接】cursor-free-vip [Support 0.45](Multi Language 多语言)自动注册 Cursor Ai ,自动重置机器ID , 免费升级使用Pro 功能: Youve reach…...
AI编程助手DeepSeek Coder:代码生成效率提升指南
AI编程助手DeepSeek Coder:代码生成效率提升指南 【免费下载链接】DeepSeek-Coder DeepSeek Coder: Let the Code Write Itself 项目地址: https://gitcode.com/GitHub_Trending/de/DeepSeek-Coder 在软件开发领域,开发者每天面临着重复编码、多语…...
抖音内容下载技术方案:多策略架构与智能下载引擎实现
抖音内容下载技术方案:多策略架构与智能下载引擎实现 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback suppor…...
金融保险会议室怎么打造?数据安全+高效协作会议系统标杆
金融保险机构的会议室不仅是协作空间,更是数据安全与合规管控的核心场景。面对战略研讨、风控决策、客户洽谈等高密会议需求,传统会议系统已难以兼顾 “高清协作、智能提效、数据不外泄” 三大核心诉求。思科视频会议 思必驰音频 离线转写主机的组合方…...
大海捞针:从海量真实世界5G-A基站数据中追踪无人机
大家读完觉得有帮助记得关注和 点赞!!! 摘要 无人机在日常生活中的潜在应用使得对其监控变得至关重要。然而,现有的无人机监控系统通常依赖于摄像头、激光雷达或雷达,这些系统的感知范围有限或部署成本高昂࿰…...
测试文章111
这是一篇测试的内容,要进行agent的测试...
别再搞混了!海康相机Bayer、Mono、YUV格式详解与选型避坑指南
工业相机图像格式全解析:从Bayer到YUV的实战选型策略 第一次接触工业相机参数表时,看到BayerRG8、Mono12 Packed、YUV422这些术语是不是感觉像在读天书?去年我在自动化检测项目上就曾因为选错图像格式,导致整套视觉算法推倒重来。…...
OpenClaw自动化流水线:Phi-3-vision处理图片转Excel报表
OpenClaw自动化流水线:Phi-3-vision处理图片转Excel报表 1. 为什么需要自动化报表生成 上周我收到财务同事发来的20张手机拍摄的销售数据表照片,要求整理成统一格式的Excel报表。手动录入数据花了整整3小时,期间还因为看错数字返工两次。这…...
SDXL 1.0绘图工坊应用案例:如何用AI为你的自媒体快速生成高质量配图
SDXL 1.0绘图工坊应用案例:如何用AI为你的自媒体快速生成高质量配图 1. 自媒体配图创作的痛点与解决方案 每天更新自媒体内容时,你是否也为寻找合适的配图而烦恼?传统方式要么耗时费力地拍摄,要么在版权图库中大海捞针ÿ…...
