网站大量收购闲置独家精品文档,联系QQ:2885784924

[数学]排序.ppt

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

第十章 内部排序 10.1 概述 10.2 插入排序 10.2.1 直接插入排序、折半插入排序、表插入排序 10.2.3 shell排序 10.3 交换排序(快速排序) 10.4 选择排序 10.4.1 简单选择排序 10.4.3 堆排序 10.5 归并排序 10.6 基数排序 10.7 各种排序方法的比较讨论 外部排序 10.1 内部排序概述 排序(Sorting): 将数据元素(或记录)的一个任意序列,重新排列成一个按关键字有序的序列。 排序方法的稳定性: 对关键字相同的数据元素,排序前后它们的领先关系保持不变,则称该排序方法是稳定的。反之,称该排序方法是不稳定的。 内部排序 待排序记录存放在计算机的内存中进行排序。 外部排序 待排序记录的数量很大,以致内存一次不能容纳全部记录,在排序过程中尚需对外存进行访问的排序。 排序的基本操作和记录的存储方式 排序过程中需要的两种基本操作: (1)比较关键字的大小; (2)将记录从一个位置移至另一个位置。 待排序记录序列可有下列三种存储方式: (1)记录存放在一组连续的存储单元中;类似于线性表的顺序存储结构,记录次序由存储位置决定,实现排序需移动记录。---顺序排序 (2)记录存放在静态链表中;记录次序由指针指示,实现排序不需移动记录,仅需修改指针。--- 链排序 (3)记录本身存放在一组连续的存储单元中,同时另设指示各个记录存储位置的地址向量,排序过程中不移动记录本身,而移动地址向量中相应记录的地址。排序结束后再根据地址调整记录的存储位置。--- 地址排序 直接插入排序举例 例:序列为{49,38,65,97,76,13,27,49} {(49),38,65,97,76,13,27,49} (38) {(38,49),65,97,76,13,27,49} (65) {(38,49,65),97,76,13,27,49} (97) {(38,49,65,97),76,13,27,49} (76) {(38,49,65,76,97),13,27,49} (13) {(13,38,49,65,76,97),27,49} (27) {(13,27,38,49,65,76,97),49} (49) {(13,27,38,49,49,65,76,97)} 假设表结构为: #define SIZE 100 //静态链表容量 Typedef struct{ RedType rc; //记录项 int next; //指针项 }SLNode; //表结点类型 Typedef struct { SLNode r[SIZE]; //0号单元为表头结点 int length; //链表当前长度 }SLinkListType; //静态链表类型 排序过程 1、最大整数存入表头结点(下标为0); 2、将下标为1的结点与表头结点构成循环链表; 3、依次将下标为2到n的结点分量按记录关键字非递减有序插入到循环链表中。 四、 Shell排序算法(缩小增量) 基本思想: 先将整个待排序记录序列分割成若干子序列分别进行直接插入排序,待整个序列“基本有序”时,再对全体记录进行一次直接插入排序。 算法复杂度:O(n3/2) Shell排序举例(非稳定的) 10.3 交换(快速)排序 1. 冒泡排序(其时间复杂度O(n2)) 2. 快速排序 ----- 对冒泡排序的一种改进 基本思想: 通过一趟排序将待排序记录分割成独立的两部分,其中一部分的关键字均比另一部分的关键字小,则可分别对这两部分记录继续分别进行排序,以达到整个序列有序。 快速排序举例 快速排序分析总结 快速排序的平均时间为T(n) = knlog(n) k为某个常数因子 经验表明,在同数量级的排序方法中,快速排序的常数因子k最小. 就平均时间而言,快速排序是最好的. 若初始序列按关键字基本有序,快速排序蜕化为起泡排序,其时间复杂度为O(n2)。 改进的方法,用“三者取中”的法则选取枢轴记录(pivotkey). 10.4 选择排序 10.4.1. 简单选择排序(其时间复杂度O(n2)) 基本思想: 每一趟在序列的后n-i+1(i=1,2,...,n-1)个记录中选取关键字最小的记录作为第i个记录。 10.4.3 堆排序(锦标赛排序) 堆的定义: n个元素的序列{k1,k2,...

文档评论(0)

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

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

1亿VIP精品文档

相关文档