[高等教育]数据结构教程 第9章 排序.ppt

  1. 1、本文档共104页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
[高等教育]数据结构教程 第9章 排序

9.1 排序的概念及其算法性能分析 排序的分类 1. 基于比较:基本操作——关键码的比较和记录的移动,其最差时间下限已经被证明为O(nlog2n)。 2. 不基于比较:根据关键码的分布特征。 #include iostream.h const int DefaultSize = 100; template class T class Element { //数据表元素定义 public: T key; //排序码 field otherdata; //其他数据成员 ElementT operator = (ElementT x) { key = x.key; otherdata = x.otherdata; return this; } bool operator == (ElementT x) { return key == x.key; } //判*this与x相等 bool operator = (ElementT x) { return key = x.key; } //判*this小于或等于x bool operator (ElementT x) { return key x.key; } //判*this大于x bool operator (ElementT x) { return key x.key; } //判*this小于x }; template class T class dataList { //数据表类定义 private: Element T* Vector; //存储排序元素的向量 int maxSize; //向量中最大元素个数 int currentSize; //当前元素个数 public: dataList (int maxSz = DefaultSize) : //构造函数 maxSize(maxSz), currentSize(0) { Vector = new ElementT[maxSize]; } int Length() { return currentSize; } //取表长度 void Swap (ElementT x, ElementT y) { ElementT temp = x; x = y; y = temp; } ElementT operator [](int i) //取第i个元素 { return Vector[i]; } int Partition (const int low, const int high); //快速排序划分 }; 注意引用型重载操作[ ] 的使用,例如针对对象A,它可以作为赋值号“=”的右部,表示从A[i]中取值;也可以作为赋值号“=”的左部,表示向A[i]中赋值。 9.2 插入排序 希尔插入排序过程示例 9.3 快速排序 9.4 选择排序 9.5 归并排序 9.5 归并排序 元素序列L1中有两个有序表Vector[left..mid]和Vector[mid+1..right]。它们可归并成一个有序表, 存于另一元素序列L2的Vector[left..right] 中。 这种方法称为两路归并 (2-way merging)。 变量 s1和 s2 分别是表Vector[left..mid]和Vector [mid+1..right]的检测指针。t 是存放指针。 9.5 归并排序 当 s1和 s2 都在两个表的表长内变化时, 根据对应项的排序码的大小, 依次把排序码小的元素排放到新表 t 所指位置中; 当 s1 与 s2 中有一个已经超出表长时,将另一 个表中的剩余部分照抄到新表中。 递归的归并排序算法 递归的归并排序算法就是在执行过程中一直调用一个划分过程,直到子序列为空或只有一个元素为止,共需log2n次递归。 在归并过程中归并成长度为2的子序列,再归并成长度为4的子序列,依此类推,直到整个序列有序为止。 #include dataList.h template class T void merge (dataListT L1, dataListT L2, const int left, const int mid, const int right) { //L1.Vector[left..mid]与L1.Vector[

文档评论(0)

jiupshaieuk12 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:6212135231000003

1亿VIP精品文档

相关文档