将杂乱无章的数据按照一定规律顺次排列起来,即,将无序序列排成一个有序序列(从小到大或从大到小)的运算
如果参加排序的数据结点包括多个数据域,那么排序往往是针对其中某一个域而言
排序方法的分类:
-
按数据存储介质:内部排序和外部排序
-
按比较器个数:串行排序和并行排序
-
按主要操作:比较排序和基数排序
-
按辅助空间:原地排序和非原地排序
-
按稳定性:稳定排序和非稳定排序
-
按自然性:自然排序和非自然排序
按照存储介质分(重点):
-
内部排序:数据量不大、存储在内存,无需内外存交换数据
-
外部排序:数据量较大、数据在外存(文件排序)
外部排序由于体量较大,只能先从外存中取部分到内存中排序,然后排完放回到外存中去,复杂的多
按比较器个数分(重点):
-
串行排序:单处理机(同一时刻比较一对元素)
-
并行排序:多处理机(同一时刻比较多对元素)
按主要操作分(重点):
-
比较排序:用比较的方法
插入排序、交换排序、选择排序、归并排序
-
基数排序:不比较元素的大小,仅仅根据元素的取值确定其有序位置
按辅助空间分:
-
原地排序:辅助空间用量O(1)的排序方法
(所占的辅助储存空间与参加排序的数据量大小无关)
-
非原地排序:辅助空间用量超过O(1)的排序方法
按稳定性分:
-
稳定排序:能够使任何数值相等的元素,排序以后相对次序不变
-
非稳定性排序:不是稳定排序的方法
排序的稳定性只对结构类型数据排序有意义
按自然性分:
-
自然排序:输入数据越有序,排序速度越快的排序方法
-
非自然排序:不是自然排序的方法
本章的所有介绍都是基于顺序表存储结构的,具体算法详见本专栏的其他篇目
//储存结构——记录序列以顺序表存储
#define MAXSIZE 20//设置记录不超过20个
typedef int KeyType;//设关键字为整型类(int型)
typedef struct {//定义每个记录(数据元素)的结构
KeyType key;//关键字
InfoType otherinfo;//其他数据项
} RedType;//Record Type
typedef struct {//定义顺序表结构
RedType r[MAXSIZE+1];//存储顺序表的向量,r[0]一般作哨兵或缓冲区
int length;//顺序表的表长
} SqList;
###各种排序的比较###
各种排序的比较用于学习完所有排序方法后的总结,若还未学习完,请先学习后面文章的知识后再来看这个比较