排序算法的分类2 ■自底向上求解 种O(n2)的简单排序 插入排序、冒泡排序、选择排序 She排序 堆排序 ■自顶向下求解:基于分治法的排序 归并排序、快速排序 分配排序 自底向上:低位优先LSD 自顶向下:高位优先MSD 北京大学信息学院张铭编写 @版权所有,转载或翻印必究 P
北京大学信息学院 张铭编写 ©版权所有,转载或翻印必究 Page 6 排序算法的分类2 自底向上求解 三种O(n2)的简单排序 插入排序、冒泡排序、选择排序 Shell排序 堆排序 自顶向下求解:基于分治法的排序 归并排序、快速排序 分配排序 自底向上:低位优先LSD 自顶向下:高位优先MSD
711基本概念 记录 Record):结点,进行排序的基 本单位 关键码(Key):唯一确定记录的一个 或多个域 排序码( Sort Key):作为排序运算依 据的一个或多个域 序列( Sequence):线性表 由记录组成 北京大学信息学院张铭编写 @版权所有,转载或翻印必究 Page 7
北京大学信息学院 张铭编写 ©版权所有,转载或翻印必究 Page 7 7.1.1 基本概念 记录(Record):结点,进行排序的基 本单位 关键码(Key):唯一确定记录的一个 或多个域 排序码(Sort Key):作为排序运算依 据的一个或多个域 序列(Sequence):线性表 由记录组成
什么是排序? 排序 将序列中的记录按照排序码顺序排列起来 排序码域的值具有不减(或不增)的顺序 内排序 整个排序过程在内存中完成 北京大学信息学院张铭编写 @版权所有,转载或翻印必究 P
北京大学信息学院 张铭编写 ©版权所有,转载或翻印必究 Page 8 什么是排序? 排序 将序列中的记录按照排序码顺序排列起来 排序码域的值具有不减(或不增)的顺序 内排序 整个排序过程在内存中完成
排序问题 给定一个序列R={r1,r2…,rn} 其排序码分别为k={k,k2 排序的目的:将记录按排序码重排 形成新的有序序列R={r'1,r32,…,r2n} n相应排序码为k={k'1,k2,…,kn 排序码的顺序 其中k1≤k2≤…≤kn,称为不减序 或k1≥k2≥≥kn,称为不增序 北京大学信息学院张铭编写 @版权所有,转载或翻印必究 P
北京大学信息学院 张铭编写 ©版权所有,转载或翻印必究 Page 9 排序问题 给定一个序列R ={r1, r2, …,rn} 其排序码分别为k ={k1, k2, …,kn} 排序的目的:将记录按排序码重排 形成新的有序序列R’= {r’1, r’2, …,r’n} 相应排序码为k’ ={k’1, k’2, …,k’n} 排序码的顺序 其中k’1≤k’2≤…≤k’n,称为不减序 或k’1≥k’2≥…≥k’n ,称为不增序
正序vs逆序 “正序”序列:待排序序列正好符合 排序要求 逆序”序列:把待排序序列逆转过 来,正好符合排序要求 例如,要求不升序列「逆序! 08123496 96341208 正序! 北京大学信息学院张铭编写 版权所有,转载或翻印必究 Page 10
北京大学信息学院 张铭编写 ©版权所有,转载或翻印必究 Page 10 正序 vs. 逆序 “正序”序列 :待排序序列正好符合 排序要求 “逆序” 序列 :把待排序序列逆转过 来,正好符合排序要求 例如,要求不升序列 08 12 34 96 96 34 12 08 逆序! 正序!