排序的本质、数据类型及算法选择

排序的本质、数据类型及算法选择

  • 一、排序的本质
  • 二、排序的数据类型
  • 三、排序算法的选择依据

前两天老金写了篇 “十大排序简介”,有点意犹未尽,这一回老金想把排序连根拔起,从排序的本质说道说道。

一、排序的本质

从字面上理解,排序就是把一堆乱糟糟的东西按照一定的规则排得整整齐齐,使无序变有序。
人喜欢有序,但大自然是喜欢无序的。
排序一词的英文是sort,这个词本来是“分类”的意思。分类是将相似的东西分到一起,表面上看和排序貌似没什么关系,实际上大多数分类都是有序的。
比如,东汉末年分三国,为什么人们都是说魏蜀吴,而不说蜀吴魏?
因为有了人,世间的一切都有了价,有了价便是有了等级。
所谓的排序,本质上就是划分等级。
对于编程来讲,排序就是将数字按从小到大的顺序排列。
没错,无论排什么,最终本质上排的都是数字。
如果把数字看成长短不一的仙人板板,那么,排序前:
在这里插入图片描述
排序后:
在这里插入图片描述
是不是赏心悦目好多?

二、排序的数据类型

常见的用于排序的数据类型有:
1. 数字排序
不要多说,不要多问。这是最基本的排序类型,包括整数、浮点数等。
2. 字符串排序
按字母顺序对单词或句子进行排序,看着是字母,实际上排的是ASCII码,而ASCII码就是数字。
3. 日期和时间排序
要将日期和时间转换为可比较的数值形式,然后进行排序。
4. 多维数据排序
包含多个属性的数据,可能需要根据一个或多个属性进行排序。例如,学生的成绩,可以以总成绩为主关键字、以单科成绩为次关键字一起排序。
5. 特殊类型数据排序
如地理坐标(经纬度)、版本号(如软件版本号)、IP地址等,它们也有特定的排序规则。

三、排序算法的选择依据

排序算法一上来就10种,为啥要这么多呢?因为没有一种万能的算法能够解决所有问题。
软件工程先天具有复杂性,计算机的世界里有一句名言:

No Silver Bullet in Software Engineering。

幻想一炮就能解决所有问题是不可能的。
排序算法的选择在实际应用中至关重要,因为它直接影响到程序的性能和效率。选择依据如下:
1. 数据规模
如果数据规模很小(比如几十个元素),可以任性一点,选择简单好写的排序算法(比如冒泡排序、选择排序、插入排序)。如果数据规模很大(比如几万、几十万甚至更多个元素),就应选择效率更高的算法(比如快速排序、归并排序)。
2. 算法稳定性
有时,即便两个元素完全相同,排序时也需要保持其原始顺序,这个就叫排序算法的稳定性。比如800对新人的集体婚礼,男方有790人都叫王小二,现在按人名排序出场,如果你把这790个新郎官的次序搞乱了,那妹子们可要几家欢喜几家愁了。如果新娘里有女侠郭芙蓉,势必送你一招“排山倒海”。
在这里插入图片描述

稳定的排序算法有:冒泡排序、插入排序、归并排序、计数排序、桶排序、基数排序。
3. 空间复杂度
有些嵌入式系统的内存空间有限,应选择空间复杂度低的算法(比如快速排序、堆排序或插入排序)。
如智能手表为了降低成本、减小体积,内存就比较有限。在智能手表中,需要按时间顺序对心率、步数、睡眠质量等健康数据进行排序,这时候就可以考虑空间复杂度低的排序算法。
4. 数据有序性
如果数据已经有一定的顺序,那插入排序和希尔排序就是比较好的选择。它们能够利用已有的有序序列,减少比较和交换的次数,从而提高效率。
如果数据完全无序,可以选择那些不依赖于数据初始状态的排序算法,比如快速排序和归并排序。

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

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

相关文章

arcgisPro加载天地图(CGCS2000)影像

1、注册天地图账号; 2、申请key; 3、添加WMTS服务器。 这里已经办好了前两步,下面详细介绍最后一步。 添加WMTS服务器。 在天地图网站,找到如下页面, 复制网址,如:http://t0.tianditu.gov.cn…

【测试】持续集成CI/CD

近期更新完毕,建议关注收藏点赞~ 目录 概括gitJenkinspostman集成jenkins代码集成jenkins 概括 CI/CD stands for Continuous Integration and Continuous Deployment 定义 团队成果持续集成到公共平台。一天可以集成1次or多次 本地代码管理 git 远程代…

python基础和redis

1. Map函数 2. filter函数 numbers generate_numbers() filtered_numbers filter(lambda x: x % 2 0, numbers) for _ in range(5):print(next(filtered_numbers)) # 输出: 0 2 4 6 83. filter map 和 reduce 4. picking and unpicking 5. python 没有函数的重载&#xff0…

【再谈设计模式】模板方法模式 - 算法骨架的构建者

一、引言 在软件工程、软件开发过程中,我们经常会遇到一些算法或者业务逻辑具有固定的流程步骤,但其中个别步骤的实现可能会因具体情况而有所不同的情况。模板方法设计模式(Template Method Design Pattern)就为解决这类问题提供了…

安卓app抓包总结(精)

前言 这里简单记录一下相关抓包工具证书的安装 burp证书安装 安装证书到移动设备(安卓7以后必须上传到设备系统根证书上) 导出证书 openssl x509 -inform DER -in cacert.der -out cacert.pem 转换格式 openssl x509 -inform PEM -subject_hash_old -in cacert.pem …

【pycharm发现找不到python打包工具,且无法下载】

发现找不到python打包工具,且无法下载 解决方法: 第一步:安装distutils,在CMD命令行输入: python -m ensurepip --default-pip第二步:检查和安装setuptools和wheel: python -m pip install --upgrade …

2025年VGC大众汽车科技社招入职测评综合能力英语口语SHL历年真题汇总、考情分析

早在1978年,大众汽车集团就开始了与中国的联系。1984年,集团在华的第一家合资企业—上汽大众汽车有限公司奠基成立;1991年,一汽-大众汽车有限公司成立;2017年,大众汽车(安徽)有限公司…

【NLP 18、新词发现和TF·IDF】

目录 一、新词发现 1.新词发现的衡量标准 ① 内部稳固 ② 外部多变 2.示例 ① 初始化类 NewWordDetect ② 加载语料信息,并进行统计 ③ 统计指定长度的词频及其左右邻居字符词频 ④ 计算熵 ⑤ 计算左右熵 ​编辑 ⑥ 统计词长总数 ⑦ 计算互信息 ⑧ 计算每个词…

30天开发操作系统 第 12 天 -- 定时器 v1.0

前言 定时器(Timer)对于操作系统非常重要。它在原理上却很简单,只是每隔一段时间(比如0.01秒)就发送一个中断信号给CPU。幸亏有了定时器,CPU才不用辛苦地去计量时间。……如果没有定时器会怎么样呢?让我们想象一下吧。 假如CPU看不到定时器而仍想计量时…

图漾相机基础操作

1.客户端概述 1.1 简介 PercipioViewer是图漾基于Percipio Camport SDK开发的一款看图软件,可实时预览相机输出的深度图、彩色图、IR红外图和点云图,并保存对应数据,还支持查看设备基础信息,在线修改gain、曝光等各种调节相机成像的参数功能…

【好书推荐】数字化转型参考书籍Rewired

Rewired 封面 图片来源:https://e.dangdang.com/products/1901358558.html 如果做企业数字化转型工作,只能推荐一本书,我会推荐2024年6月中信出版社出版的Rewired 《麦肯锡讲全球企业数字化》。 果总为这本书写了一篇推荐,供大…

WPF控件Grid的布局和C1FlexGrid的多选应用

使用 Grid.Column和Grid.Row布局,将多个C1FlexGrid布局其中,使用各种事件来达到所需效果,点击复选框可以加载数据到列表,移除列表的数据,自动取消复选框等 移除复选框的要注意!!!&am…

ffmpeg7.0 合并2个 aac 文件

ffmpeg7.0 将2个aac文件合并。 #include <stdio.h>// 之所以增加__cplusplus的宏定义&#xff0c;是为了同时兼容gcc编译器和g编译器 #ifdef __cplusplus extern "C" { #endif #include <libavformat/avformat.h> #include <libavcodec/avcodec.h>…

FreePBX 17 on ubuntu24 with Asterisk 20

版本配置&#xff1a; FreePBX 17&#xff08;最新&#xff09; Asterisk 20&#xff08;最新Asterisk 22&#xff0c;但是FreePBX 17最新只支持Asterisk 21&#xff0c;但是21非LTS版本&#xff0c;所以选择Asterisk 20&#xff09; PHP 8.2 Maria DB (v10.11) Node J…

2025-微服务—SpringCloud-1~3

2025-微服务—SpringCloud 第一章、从Boot和Cloud版本选型开始说起1、Springboot版本2、Springcloud版本3、Springcloud Alibaba4、本次讲解定稿版 第二章 关于Cloud各种组件的停更/升级/替换1、微服务介绍2、SpringCloud是什么&#xff1f;能干吗&#xff1f;产生背景&#xf…

php常用开发框架性能对比

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、框架简介&#xff1f;1.1 webman1.2 CodeIgniter(CI框架)1.3 ThinkPHP1.4 Laravel1.5 EasySwoole 二、压测对比1.机器配置2.webman压测2. ThinkPHP压测3. L…

新闻发布及管理系统

文末附有完整项目代码 在信息飞速传播的时代&#xff0c;新闻发布及管理系统变得愈发重要。本文将详细介绍如何设计并实现这样一个系统。 一、项目背景 随着电脑、智能手机等设备的普及&#xff0c;各种网站应运而生。而信息发布是网络的一大特点&#xff0c;人们上网主要是为…

sklearn-逻辑回归-制作评分卡

目录 数据集处理 分箱 分多少个箱子合适 分箱要达成什么样的效果 对一个特征进行分箱的步骤 分箱的实现 封装计算 WOE 值和 IV值函数 画IV曲线&#xff0c;判断最佳分箱数量 结论 pd.qcut 执行报错 功能函数封装 判断分箱个数 在银行借贷场景中&#xff0c;评分卡是…

Http请求响应——请求

Http概述 Http协议&#xff08;HyperText Transfer Protocol&#xff0c;超文本传输协议&#xff09;&#xff0c;是一种用于传输网页数据的协议&#xff0c;规定了浏览器和服务器之间进行数据传输的规则&#xff0c;简单说来就是客户端与服务器端数据交互的数据格式。 客户端…

python学opencv|读取图像(三十一)缩放图像的三种方法

【1】引言 前序学习进程中&#xff0c;我们至少掌握了两种方法&#xff0c;可以实现对图像实现缩放。 第一种方法是调用cv2.resize()函数实现&#xff0c;相关学习链接为&#xff1a; python学opencv|读取图像&#xff08;三&#xff09;放大和缩小图像_python opencv 读取图…