湘潭大学 数据结构 课件 ppt Ch07 Sorting 排序算法.ppt

湘潭大学 数据结构 课件 ppt Ch07 Sorting 排序算法.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
§8 大型结构的排序 问题: 交换大型结构可能是非常昂贵的操作。 解决方法: 在数组中包含指向结构的指针,通过交换指针来排序 – 间接排序。 最后在必要时再实际地重新安排结构。 list key table [0] d 0 [1] b 1 [2] f 2 [3] c 3 [4] a 4 [5] e 5 table 4 1 3 0 5 2 排序列表是 list [ table[0] ], list [ table[1] ], ……, list [ table[n?1] ] Note: 每一个序列都由不相交的环构成。 list key table [0] d 4 [1] b 1 [2] f 3 [3] c 0 [4] a 5 [5] e 2 temp = d current = 0 next = 4 a 0 4 5 e 4 5 2 f 5 2 3 c 2 3 d 3 最坏情形下有 ? 个环,需要 ? 次记录的移动。 ? N / 2? ? 3N / 2? T = O( m N ) , m 是每个结构的大小。 〖例〗Table Sort §9 排序的一般下界 【定理】只使用元素间比较的任何排序算法需要进行 ?( N log N )次比较。 证明: K0 ? K1 K1 ? K2 K0 ? K2 stop [0,1,2] stop [0,2,1] stop [2,0,1] T F T F K0 ? K2 K1 ? K2 stop [1,0,2] stop [1,2,0] stop [2,1,0] T F T F T F 三元素排序的决策树 当进行 N 个互异元素排序时,有 N! 种可能的结果。 因此任意决策树必定含有至少N! 片树叶。 如果树高为 k, 那么 N! ? 2k?1 (一棵完全二叉树中的叶子数量) ? k ? log(N!) + 1 由于 N! ? (N/2)N/2 及 log2 N! ? (N/2)log2(N/2) = ? ( N log2 N ) 因此 T(N) = k ? c ? N log2 N . 第7章 排序 ——很常见的一类问题(并不局限于排序本身) §1 预备知识 void X_Sort ( ElementType A[ ], int N ) /* N 是排序元素个数,是合法的整数*/ /* 为简单起见,假设数组只包含整数 */ /* ‘’ 和 ‘’ 运算符存在,而且是仅有的允许对输入数据进行的操作 */ 基于比较 的排序 /* 仅考虑内部排序 */ 整个排序工作能够在主存中完成 §2 插入排序 void InsertionSort ( ElementType A[ ], int N ) { int j, P; ElementType Tmp; for ( P = 1; P N; P++ ) { Tmp = A[ P ]; /* the next coming card */ for ( j = P; j 0 A[ j - 1 ] Tmp; j-- ) A[ j ] = A[ j - 1 ]; /* shift sorted cards to provide a position for the new coming card */ A[ j ] = Tmp; /* place the new card at the proper position */ } /* end for-P-loop */ } 最坏情形: 输入的 A[ ] 是反序的。 T( N ) = O( N2 ) 最好情形: 输入的 A[ ] 是已预先排序的。 T( N ) = O( N ) §3 一些简单排序算法的下界 【定义】成员存数的数组的一个逆序是指数组中具有性质 i j 但 A[i] A[j] 的序偶( A[i], A[j])。 〖例1〗 输入数据 34, 8, 64, 51, 32, 21 有 个逆序。 9 (34, 8) (34, 32) (34, 21) (64, 51) (64, 32) (64, 21) (51, 32) (51, 21) (32, 21) 在插入排序中恰好需要执行 次交换。 9 交换两个不按原序排列的相邻元素 恰好消除一个逆序。 T ( N, I ) = O( ) , I 是初始数组中的逆序数。 I + N 如果数组几乎有序, 这个时间是很快的。 这就是全部结论? 那么怎么加速排序? 嘿!

文档评论(0)

整理王 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档