- 1、本文档共65页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
1数据结构0-排序.ppt
第10章 内排序 76 82 16 57 45 46 11 22 q[0] q[1] q[2] q[3] q[4] q[5] q[6] q[7] q[8] q[9] 10个队列 76 82 57 45 46 11 22 原始序列 第一次分配 16 11 82 22 45 76 16 46 57 q[0] q[1] q[2] q[3] q[4] q[5] q[6] q[7] q[8] q[9] 10个队列 57 82 16 76 45 46 11 22 第一次收集结果 第二次分配 11 16 22 45 46 57 76 82 第二次收集结果 算法分析: (1)设数字有效位为d位,需要d趟分配、回收。 (2)每趟分配运算时间O(n) (3)收集:基数为rd,即rd个队列。从rd个队列中收集,运算时间O(rd) (4)一趟分配、回收运算时间O(n+rd), 时间复杂度O(d*(n+rd)) (5)基数排序是稳定的。 (6)辅助空间:每个队列首尾2个指针,共2rd个指针;n个记录需要n个指针域。 例: k1 k2 k3 k4 k5 k6 初始关键字:(43 89 21 43 28 15 ) 第1遍排序后: 15 (89 21 43 28 43 ) 第2遍排序后: 15 21 (89 43 28 43 ) 第3遍排序后: 15 21 28 (43 89 43 ) 第4遍排序后: 15 21 28 43 (89 43 ) 第5遍排序后: 15 21 28 43 43 89 简单选择排序算法: ( 对数组r[1..n]中的记录作简单选择排序) void SelectSort(RecType r[],int n) { int i,j,min; RecType x; //交换记录的中间变量 for (i=1;in;i++) //共n-1趟(遍) { min=i; //r[i]为最小记录r[min] for (j=i+1;j=n;j++) if (r[j].keyr[min].key) min=j; //修改min if (min!=i) //若r[min]不是r[i] { x=r[min]; //交换r[min]和r[i] r[min]=r[i]; r[i]=x; } } } 算法分析: (1)比较次数,在任何情况下,均为 n-1 ∑ (n-i)=(n-1)+(n-2)+...+1 i=1 = n(n-1)/2 =O(n2) (2)交换记录的次数 在最好情况下,原n个记录递增有序: 不移动记录。 在最坏情况下,每次都要交换数据(不是递减有序) 共交换记录n-1对,移动记录数3(n-1)次。 故,时间复杂度为O(n2)。 (3)只需少量中间变量作为辅助空间。 (4)算法是不稳定的。 10.4.2.堆排序(Heap Sort) 堆的定义:n个元素的序列{k1,k2,…,kn} 当且仅当满足下关系时,称之为堆。 ki ≤ k2i ki ≥ k2i 或 ki ≤ k2i+1 ki ≥ k2i+1 (i=1,2,…, ?n/2?) 其中: 前面一种称为小顶堆; 后面一种称为大顶堆。 n个元素的序列{k1,k2,…,kn}可看成是一个结点个数为n的完全二叉数,若其为大顶堆,则k1最大;若其为小顶堆,则k1最小。 例: 序列1:{96,83,27,38,11,09} 序列2:{12,36,24,85,47,30,53,91} 96 83 27 38 11 09 36 85 47 91 24 30 53 12 序列2的二叉树(小顶)堆 序列1的二
文档评论(0)