知识大全 排序 - 排序基本概念 (二)
Posted 知
篇首语:追风赶月莫停留,平芜尽处是春山。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 排序 - 排序基本概念 (二)相关的知识,希望对你有一定的参考价值。
排序算法分析
排序算法的基本操作
大多数排序算法都有两个基本的操作
( ) 比较两个关键字的大小;
( ) 改变指向记录的指针或移动记录本身
注意
第( )种基本操作的实现依赖于待排序记录的存储方式
待排文件的常用存储方式
( ) 以顺序表(或直接用向量)作为存储结构
排序过程 对记录本身进行物理重排(即通过关键字之间的比较判定 将记录移到合适的位置)
( ) 以链表作为存储结构
排序过程 无须移动记录 仅需修改指针 通常将这类排序称为链表(或链式)排序;
( ) 用顺序的方式存储待排序的记录 但同时建立一个辅助表(如包括关键字和指向记录位置的指针组成的索引表)
排序过程 只需对辅助表的表目进行物理重排(即只移动辅助表的表目 而不移动记录本身) 适用于难于在链表上实现 仍需
避免排序过程中移动记录的排序方法
排序算法性能评价
( ) 评价排序算法好坏的标准
评价排序算法好坏的标准主要有两条
① 执行时间和所需的辅助空间
② 算法本身的复杂程度
( ) 排序算法的空间复杂度
若排序算法所需的辅助空间并不依赖于问题的规模n 即辅助空间是O( ) 则称之为就地排序(In PlaceSou)
非就地排序一般要求的辅助空间为O(n)
( ) 排序算法的时间开销
大多数排序算法的时间开销主要是关键字之间的比较和记录的移动 有的排序算法其执行时间不仅依赖于问题的规模 还取决
于输入实例中数据的状态
文件的顺序存储结构表示
#define n l //假设的文件长度 即待排序的记录数目
typedef int KeyType; //假设的关键字类型
typedef struct //记录类型
KeyType key; //关键字项
InfoType otherinfo;//其它数据项 类型InfoType依赖于具体应用而定义
RecType;
typedef RecType SeqList[n+ ];//SeqList为顺序表类型 表中第 个单元一般用作哨兵
注意
若关键字类型没有比较算符 则可事先定义宏或函数来表示比较运算
【例】关键字为字符串时 可定义宏 #define LT(a b)(Stromp((a) (b))< ) 那么算法中 a
用C++,则定义重载的算符"<"更为方便。
cha138/Article/program/sjjg/201311/23809相关参考
基本概念 关键字项及关键字(Key)记录由若干个数据项(或域)组成其中有一项可用来标识一个记录称为关键字项该数据项的值称为关键字 排序(Sorting)又称分类假设含n个记
归并排序 归并排序有两种实现方法自底向上和自顶向下 自底向上的方法 ()自底向上的基本思想 自底向上的基本思想是第趟归并排序时将待排序的文件R[n]看作是n个长度为的有序子文件将这些子文件
堆排序 堆排序利用了大根堆(或小根堆)堆顶记录的关键字最大(或最小)这一特征使得在当前无序区中选取最大(或最小)关键字的记录变得 简单 ()用大根堆排序的基本思想 ①先将初始文件R[n]建
第八章排序 基本概念 文件有一组记录组成记录有若干数据项组成唯一标识记录的数据项称关键字; 排序是将文件按关键字的递增(减)顺序排列; 排序文件中有相同的关键字时若排序后相对次序保持不变的
算法分析 ()算法的最好时间复杂度 若文件的初始状态是正序的一趟扫描即可完成排序所需的关键字比较次数C和记录移动次数M均达到最小值 Cmin=n Mmin= 冒泡排序最好的时间复杂度为O
)在基于比较的排序方法中每次比较两个关键字的大小之后仅仅出现两种可能的转移因此可以用一棵二叉树来描述比较判定过 程 当文件的n个关键字随机分布时任何借助于比较的排序算法至少需要O(nlgn)的
划分算法Partition ()简单的划分方法 ①具体做法 第一步(初始化)设置两个指针i和j它们的初值分别为区间的下界和上界即i=lowi=high;选取无序区的第一个记录 R[i](即
哨兵的作用 算法中引进的附加记录R[]称监视哨或哨兵(Sentinel) 哨兵有两个作用 ①进人查找(插入位置)循环之前它保存了R[i]的副本使不致于因记录后移而丢失R[i]的内容; ②它
()在基于比较的排序方法中每次比较两个关键字的大小之后仅仅出现两种可能的转移因此可以用一棵二叉树来描述比较判定 过程 当文件的n个关键字随机分布时任何借助于比较的排序算法至少需要O(nlgn)
二叉排序树上的运算 ()二叉排序树的插入和生成 ①二叉排序树插入新结点的过程 在二叉排序树中插入新结点要保证插入后仍满足BST性质其插入过程是 (a)若二叉排序树T为空则为待插入的关键字k