8.1.1 排序的基本概念
排序:将一组杂乱无章的数据按一定规律顺次排列起来,即将无序序列排成一个有序序列(由小到大或由大到小)的运算。
8.1.2 排序的方法
1、按存储介质可分为:
(1)内部排序:数据量不大,数据在内存,无需内外存交换数据。
(2)外部排序:数据量较大, 数据在外存(文件排序)。
2、按比较器个数可分为:
(1)串行排序:单处理机(同一时刻比较一对元素)。
(2)并行排序:多处理机(同一时刻比较多对元素)。
3、按主要操作可分为
(1)比较操作排序:用比较的方法,比如插入排序、交换排序、选择排序、归并排序。
(2)基数排序:不比较元素的大小,仅仅根据元素本身的取值确定其有序位置。
4、按辅助空间可分为
(1)原地排序:辅助空间用量为O(1)的排序方法。
(2)非原地排序:辅助空间用量超过O(1)的排序方法。
5、按稳定性可分为
(1)稳定排序:能够使任何数值相等的元素,排序之后相对有序次序不变。
(2)非稳定排序:不是稳定排序的方法。
例1(直接插入排序):
原始数据:{49,97,76,13,27,49'}
排序之后:{13,27,49,49',76,97}
这是一种稳定排序。
例2(简单选择排序):
原始数据:{49,97,76,13,27,49'}
排序之后:{13,27,49',49,76,97}
这是不稳定的排序。
排序的稳定性只对结构类型数据排序有意义。
6、按自然性可分为
(1)自然排序:输入数据越有序,排序的速度越快的排序算法。
(2)非自然排序:不是自然排序的方法。
8.1.3 本章使用到的数据结构
//顺序表存储
#define MAXSIZE 20
typedef int KeyType;
typedef struct
{
KeyType key;
InfoType otherinfo;
}RedType;
typedef struct
{
RedType r[MAXSIZE];
int length;
}SQList;