问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

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

创作时间:
作者:
@小白创作中心

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

引用
CSDN
1.
https://m.blog.csdn.net/jjmhx/article/details/145029870

排序算法是计算机科学中的基础概念,广泛应用于数据处理和分析中。本文将从排序的本质出发,探讨不同数据类型下的排序方法,并深入分析选择排序算法时需要考虑的关键因素。

排序的本质

从字面上理解,排序就是把一堆乱糟糟的东西按照一定的规则排得整整齐齐,使无序变有序。

人喜欢有序,但大自然是喜欢无序的。

排序一词的英文是sort,这个词本来是“分类”的意思。分类是将相似的东西分到一起,表面上看和排序貌似没什么关系,实际上大多数分类都是有序的。

比如,东汉末年分三国,为什么人们都是说魏蜀吴,而不说蜀吴魏?

因为有了人,世间的一切都有了价,有了价便是有了等级。

所谓的排序,本质上就是划分等级。

对于编程来讲,排序就是将数字按从小到大的顺序排列。

没错,无论排什么,最终本质上排的都是数字。

如果把数字看成长短不一的仙人板板,那么,排序前:

排序后:

是不是赏心悦目好多?

排序的数据类型

常见的用于排序的数据类型有:

1. 数字排序

不要多说,不要多问。这是最基本的排序类型,包括整数、浮点数等。

2. 字符串排序

按字母顺序对单词或句子进行排序,看着是字母,实际上排的是ASCII码,而ASCII码就是数字。

3. 日期和时间排序

要将日期和时间转换为可比较的数值形式,然后进行排序。

4. 多维数据排序

包含多个属性的数据,可能需要根据一个或多个属性进行排序。例如,学生的成绩,可以以总成绩为主关键字、以单科成绩为次关键字一起排序。

5. 特殊类型数据排序

如地理坐标(经纬度)、版本号(如软件版本号)、IP地址等,它们也有特定的排序规则。

排序算法的选择依据

排序算法一上来就10种,为啥要这么多呢?因为没有一种万能的算法能够解决所有问题。

软件工程先天具有复杂性,计算机的世界里有一句名言:

No Silver Bullet in Software Engineering。

幻想一炮就能解决所有问题是不可能的。

排序算法的选择在实际应用中至关重要,因为它直接影响到程序的性能和效率。选择依据如下:

1. 数据规模

如果数据规模很小(比如几十个元素),可以任性一点,选择简单好写的排序算法(比如冒泡排序、选择排序、插入排序)。如果数据规模很大(比如几万、几十万甚至更多个元素),就应选择效率更高的算法(比如快速排序、归并排序)。

2. 算法稳定性

有时,即便两个元素完全相同,排序时也需要保持其原始顺序,这个就叫排序算法的稳定性。比如800对新人的集体婚礼,男方有790人都叫王小二,现在按人名排序出场,如果你把这790个新郎官的次序搞乱了,那妹子们可要几家欢喜几家愁了。如果新娘里有女侠郭芙蓉,势必送你一招“排山倒海”。

稳定的排序算法有:冒泡排序、插入排序、归并排序、计数排序、桶排序、基数排序。

3. 空间复杂度

有些嵌入式系统的内存空间有限,应选择空间复杂度低的算法(比如快速排序、堆排序或插入排序)。

如智能手表为了降低成本、减小体积,内存就比较有限。在智能手表中,需要按时间顺序对心率、步数、睡眠质量等健康数据进行排序,这时候就可以考虑空间复杂度低的排序算法。

4. 数据有序性

如果数据已经有一定的顺序,那插入排序和希尔排序就是比较好的选择。它们能够利用已有的有序序列,减少比较和交换的次数,从而提高效率。

如果数据完全无序,可以选择那些不依赖于数据初始状态的排序算法,比如快速排序和归并排序。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号