二分查找排序 排序 - 排序基本概念 (二)
排序 - 排序基本概念 (二)
排序算法分析

排序算法的基本操作
大多数排序算法都有两个基本的操作
( ) 比较两个关键字的大小;
( ) 改变指向记录的指针或移动记录本身
注意
第( )种基本操作的实现依赖于待排序记录的存储方式
待排文件的常用存储方式
( ) 以顺序表(或直接用向量)作为存储结构
排序过程 对记录本身进行物理重排(即通过关键字之间的比较判定 将记录移到合适的位置)
( ) 以链表作为存储结构
排序过程 无须移动记录 仅需修改指针 通常将这类排序称为链表(或链式)排序;
( ) 用顺序的方式存储待排序的记录 但同时建立一个辅助表(如包括关键字和指向记录位置的指针组成的索引表)
排序过程 只需对辅助表的表目进行物理重排(即只移动辅助表的表目 而不移动记录本身) 适用于难于在链表上实现 仍需
避免排序过程中移动记录的排序方法
排序算法性能评价
( ) 评价排序算法好坏的标准
评价排序算法好坏的标准主要有两条
① 执行时间和所需的辅助空间
② 算法本身的复杂程度
( ) 排序算法的空间复杂度
若排序算法所需的辅助空间并不依赖于问题的规模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 "可用"lt(a,b)"取代。.lishixinzhi若使
用C++,则定义重载的算符"<"更为方便。
lishixinzhi/Article/program/sjjg/201311/23809