- 1、本文档共54页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第七章节 排序
第七章 排 序 内容 基本概念 插入排序 交换排序 选择排序 归并排序 分配排序 各种排序方法的比较 7.1 基本概念 排序(sorting)是计算机科学的重要课题,在许多由计算机处理的问题中,大约有50%以上的时间花费在排序上,很多计算机算法都与排序有关。 7.2 插入排序 插入排序(Insertion sorting)的基本思想: 设待排序的表为 (r1,r2,…….,rn),把记录ri (2≤i≤n)插入到它前面已排好序的 i-1个记录(r1,r2,…….,ri-1) (1≤i≤n)中,使得表的前I个记录 也成为排好序的。 直接插入排序图示 7.2.3 希尔排序 算法先将表中诸记录按某个增量d分为若干组,每组中 相邻记录的位置相差d,对每组记录用某种方法进行排序, 然后再用较小的增量对表中记录进行分组,对每一组再 进行排序,…….。当增量减为1时,整个表中记录被分为 1组,由于分组增量是逐渐减小的,所以希尔排序又称为 渐减增量排序。 7.3 交换排序 7.3.1 起泡排序 起泡排序算法 void Bubblesort (SqList L) { bool done=FALSE; for(int j=1; j=L.length-1!done; j++) { done=TRUE; for(int i=1; i=L.length-j; i++) if(L.r[i+1].keyL.r[i].key) { rectype temp=L.r[i]; L.r[i]=L.r[i+1]; L.r[i+1]=temp; done=FALSE; } } } 7.3.2 快速排序 快速排序(Quick sort)是目前内排序算法中平均性能最好 的排序方法,它的基本思想是选取被排序表中某个关键码作 为基准(pivot),将表划分成左右两个子表: 左子表中各记 录的关键码均小于或等于基准值,而右子表中各记录的关 键码均大于或等于基准值。然后以同样的方法递归地处理 这两个子表,直到完成全部记录的排序。 例如对含有13个记录的表(r1, r2, …. , r13)进行划分的过 程,取中间一个记录的关键码275作为基准,划分时用两 个指针i和j扫描表,指针i从表头向右端扫描,直至遇到一 个关键码值大于或等于基准的记录;指针j从表尾向左端扫 描,直至遇到一个关键码值小于或等于基准的记录。接着 交换ri,和rj,然后 i和j继续沿原方向相下扫描、比较、交换。 当i和j交叉时,表中各记录都与基准比较过,表被划分为 成左右两个子表,左子表中各记录的关键码均小于或等于 基准值。 7.4 选择排序 选择排序(Selection sort)是从待排序的表(含n个记录)中先选出关键码最大或最小的记录,将它放到第n(或第1)个位置上,然后从其余n-1个记录中选出关键码最大或最小的记录,将它放到第n-1(或第2)个位置上,…..,直到选择了n-1个记录。 7.4.2 堆排序 为了避免直接选择排序时相邻两趟扫描中的某些重复比 较,可以采用树形选择方法:设待排序表中的n(设为2的幂) 个记录的关键码为k1≤ k2 ≤ ……. ≤ kn,先比较k1:k2, k3:k4,..……., Kn-1: kn ,选出每对中的较大者;再用同样的 方法比较选出的每对中的较大者,直至选出最大的关键码。 找到最大的关键码,将记录选出,并用 -∞代替原记录 中的关键码,继续比较, 直到所有记录按大到小的次序选 出为止。 显然,对n个关键码,选取最大的关键码所构成树的深度为?log2n?即为比较次数,整个过程的比较次数为 (n-1)+(n-1)*(?log2n?-1)?n*?log2n? 7.5 归并排序 归并排序(Merge sort)的基本思想是通过归并两个以上已排序好的表成为一个有序表。设L1和L2均是已排序好的表,归并这两个表生成有序表L3的过程如下: 归并两个有序表的算法 void Merge(rectype SR[],rectype TR[],int i, int m, int n) { //将有序表SR[i..m]和SR[m+1..n]归并为有序表TR[i..n] int j, k;
您可能关注的文档
- 第5章节 无源网络综合(二端口综合).doc
- 第5章节 扬声器及扬声器系统.ppt
- 第5章节 图像形态学.ppt
- 第5章节 无源网络综合(一端口综合).doc
- 第5章节 网络安全.ppt
- 第5章节-回溯法-习题.ppt
- 第5章节_项目跟踪初步New-2011.ppt
- 第4章节 计算机网络基础.ppt
- 第5章节习题-答案.doc
- 第5章节 电路的暂态分析.ppt
- DB44_T 2611-2025 城市排水管网有毒有害气体监测与风险分级管理技术标准.pdf
- DB44_T 2612-2025 竞赛类科普活动策划与实施服务规范.pdf
- DB43_T 2947-2024 烟草种子质量控制规程.pdf
- DB37_T 4836-2025 煤矿风量实时监测技术要求.pdf
- 叉车防撞系统,全球前22强生产商排名及市场份额(by QYResearch).docx
- 超滤膜,全球前18强生产商排名及市场份额(by QYResearch).docx
- DB62T 4172-2020 玉米品种 酒623规范.pdf
- DB62T 4160-2020 在用真空绝热深冷压力容器综合性能在线检测方法.pdf
- DB62T 4164-2020 辣椒品种 酒椒1号.pdf
- DB62T 4133-2020 公路隧道地质超前预报机械能无损探测技术规程.pdf
文档评论(0)