- 1、本文档共92页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构-9内部排序
9.3.3 堆排序 n1---n5 n1~n4成堆 2 6 4 3 1 9 2 4 n1 n2 n3 n4 n5 n6 n7 n8 9 8 7 6 1 2 4 4 3 1 9 2 1 n1 n2 n3 n4 n5 n6 n7 n8 9 8 7 6 9.3.3 堆排序 n1---n4 n1~n3成堆 2 4 4 3 1 9 2 1 n1 n2 n3 n4 n5 n6 n7 n8 9 8 7 6 4 2 2 3 4 2 1 9 4 1 n1 n2 n3 n4 n5 n6 n7 n8 9 8 7 6 4 9.3.3 堆排序 n1---n3 n1~n2成堆 2 3 4 2 1 9 4 1 n1 n2 n3 n4 n5 n6 n7 n8 9 8 7 6 4 1 3 2 2 4 1 1 9 4 3 n1 n2 n3 n4 n5 n6 n7 n8 9 8 7 6 4 3 9.3.3 堆排序 n1---n2 2 2 4 1 1 9 4 3 n1 n2 n3 n4 n5 n6 n7 n8 9 8 7 6 4 3 1 2 2 1 4 1 1 9 4 3 n1 n2 n3 n4 n5 n6 n7 n8 9 8 7 6 4 3 2 1 2 3 4 6 7 8 9 堆排序算法 typedef SqTable HeapType; void HeapAdjust(HeapType H,int s,int m) { //H.r[s..m]中除H.r[s].key外均满足堆定义,将对H.r[s]调整为大顶堆 rc=H.r[s]; // 暂存根结点的记录 for(j=2*s;j=m;j*=2){ // 沿key较大的孩子结点向下筛选 if(jmH.r[j].keyH.r[j+1].key) ++j;//j为key较大孩子记录的下标 if(rc.key=H.r[j].key) break; // 不需要调整 H.r[s] = H.r[j]; s = j; // 把大关键字记录往上调 } //for H.r[s] = rc; // 回移筛选下来的记录 } // HeapAdjust void HeapSort(HeapType H) { // 对顺序表H进行堆排序。 for(i=H.length/2;i0;--i) // 把H.r[1..H.length]建成大顶堆 HeapAdjust(H, i, H.length ); w=H.r[1]; H.r[1]=H.r[H.length]; H.r[H.length]=w; //交换堆顶和堆底 for(i=H.length-1;i1;--i){ HeapAdjust(H,1,i); //从根开始调整,将H.r[1..i] 重新调整为大顶堆 w=H.r[1]; H.r[1]=H.r[i]; H.r[i]=w; //将堆顶记录和堆底交换 } //for } // HeapSort 9.3.3 堆排序 时间复杂度:O(nlogn) 空间复杂度:O(1) 优点: 最坏情况下时间复杂度也仅为O(nlogn) 。 缺点: 运行时间主要耗费在建初始堆和调整堆上,排序数据较少时,不值得提倡。 9.3.4 二叉树排序 基本思想(对选择排序的改进): 将欲排序的元素一一以建立二叉树的方式插入; (1)每一个节点最多只有两个子节点(左节点、右节点) (2)若一节点有子节点,则该节点的数据要比左节点的数据大,且比右节点的数据小(左节点parent ≤右节点) 51 16 66 11 32 25 37 90 75 99 81 ZHAO QIAN LI SUN ZHOU WU WANG CHEN 中序遍历即为有序 42 42 15 61 22 54 38 42 15 42 15 61 42 15 61 22 42 15 61 22 54 38 42 15 61 22 54 9.3.4 二叉树排序 void BSTSort( SqList L ) { // 利用二叉排序树对顺序表L进行排序 BiTree T=NULL; // 初始化二叉排序树为空树 for(i=1;iL.length;++i) Insert_BST( T,L.r[i]); // 按顺序表L构造二叉排序树 i=0; InOrder(T,Output(T,L,i)); // 中序遍历二叉排序树 //通过函数指针引用Output,将排序的记录由小到大输出至L.r[i] } // BSTSort
您可能关注的文档
最近下载
- 金刚砂耐磨地坪工程劳务施工合同协议书范本.doc
- 2024年洛阳文化旅游职业学院单招职业技能测试题库精编答案.docx VIP
- DL_T 2078.2-2021CN 调相机检修导则 第2部分: 保护及励磁系统.docx
- GB39800.2-2020 个体防护装备配备规范 第2部分:石油、化工、天然气.pdf
- T_CIATCM 121-2024 共享中药房中药调剂信息系统建设指南.pdf VIP
- 优秀仓管员全能战实训练.doc VIP
- 2010太阳能热水系统在北京奥运村工程中的应用.pdf VIP
- 建筑工程安全资料全套整理版.doc
- 保健食品原料目录 营养素补充剂(2023年版).docx
- SA51024矽力杰 中文资料 规格书 pdf 下载电源管理芯片全线.pdf VIP
文档评论(0)