1. 排序基础知识和总结
-
排序:将无序序列排成一个有序序列(由小到大 或 由大到小)
-
按 主要操作,排序方法可分为:
- 比较排序:用比较的方法
插入排序、交换排序、选择排序、归并排序 - 基数排序:不比较元素的大小,仅仅根据元素本身的取值确定其有序位置。
- 比较排序:用比较的方法
-
主要学习:
-
存储结构——记录序列以顺序表存储:
#define MAXSIZE 20 //设记录不超过20个
typedef int KeyType;//设关键字为int型
//定义每个记录(数据元素)的结构
typedef struct {
KeyType key;//关键字
// InfoType otherinfo;//其他数据项,这里暂时不需要
}ReadType;//Record Type
//定义顺序表的结构
typedef struct{
ReadType nums[MAXSIZE + 1];//存储顺序表的向量;r[0]一般作哨兵或缓冲区,不用来存储数据记录
int length;//顺序表的长度
};
注:特别注意以下几点!!!
- 后续和排序有关的文章都采用以上的存储结构;
- 为了统一,后续和排序有关的算法中,L.nums[0]作为哨兵位,记录/数据元素从序列的索引1开始存入,即L.nums[1]开始存入。
-
排序算法的稳定性:
按稳定性可分为:稳定排序 和 非稳定排序- 稳定排序:排序时存在数值相等的元素,排序后相对位置不发生改变。
- 非稳定排序:不是稳定排序的方法。
-
各种排序方法比较:
- 时间性能
快速排序缺点:递归实现,空间复杂度较高
基数排序缺点:不是对所有的需要排序的关键字都适用
快速排序越乱越好,尽量避免在基本有序的情况下使用快速排序
-
空间性能
指的是排序过程中所需的辅助空间大小
-
稳定性能