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

第9篇 章 排序( sorting)数据结构课件.ppt

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

20:n 21:2*(n/2) 22:4*(n/4) …… 2k: 设n=2k,一共做了K趟 K=log2n T(n)?n+2T(n/2)?n+2(n/2+2T(n/4))=2n+22T(n/22) ?2n+22(n/22+2T(n/23))=3n+23T(n/23) ?… ?kn+2kT(n/2k)=nlog2n+nT(1)=O(nlog2n) 可以证明Quicksort的平均计算时间也是O(nlog2n ) 因为一般情况:n个记录被分成两个子序列,分别 含有r和n-r个对象,则比较次数 C(n)=n+C(r)+C(n-r) C(n)不仅依赖于n,而且依赖于表中记录的排列顺序。 下面讨论空间复杂性: 以上讨论的是递归算法,也可用非递归算法来实现。 不管是递归(由编译程序来实现)还是非递归。第一次 分划后,左部、右部要分别处理。 所以,用栈来存放: (1) 存放什么:左部或右部的上、下界的下标。 (2) 放长的还是短的:放长的 (3) 栈要多大:O(log2n)?放短的O(n) 9.4 选择排序 方法:1.直接选择排序 2.锦标赛排序 3.堆排序 1. 直接选择排序 思想:首先在n个记录中选出关键码最小(最大)的记录, 然后与第一个记录(最后第n个记录)交换位置, 再在其余的n-1个记录中选关键码最小(最大)的记 录,然后与第二 个记录(第n-1个记录)交换位置, 直至选择了n-1个记录。 例子: 0 1 2 3 4 5 21 25 49 25* 16 08 08 [25 49 25* 16 21] 08 16 [49 25* 25 21 ] 08 16 21 [25* 25 49 ] 08 16 21 25* 25 49] 08 16 21 25* 25 49 算法: template class Type void SelectSort(datalistType list) { for ( int i=0; ilist.CurrentSize-1; i++) SelectExchange(list, i); } template class Type void SelectExchange(datalistType list, const int i) { int k=i; for ( int j=i+1; jlist.CurrentSize; j++) if (list.Vector[j].getkey( )list.Vector[k].getkey( )) k=j; if ( k!=i) Swap(list.Vactor[i], list.Vector[k]); } 算法分析:比较次数n-1+n-2+…+1=n(n-1)/2=O(n2) 与原始记录次序无关。 稳定性 :不稳定的。 2. 锦标赛排序(树形选择排序) 直接选择排序存在重复做比较的情况,锦标赛排序克 服了这一缺点。 思想:n个对象的关键码两两比较得到? n/2 ?个 比较的优胜者(关键码小者)保留下来,再对 这? n/2 ?个对象再进行关键码的两两比较, ……直至选出一个最小的关键码为止。 如果n不是2的K次幂,则让叶结点数补足 到满足2k-1n?2k的2k个 08 21 08 63 08 25* 21 21 25 49 25* 16 08 63 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 n0=n2+1 算法分析: 树的深度? log2n?。总的比较次数 (n-1)+(n-1)( ? log2n? -1)?(n-

您可能关注的文档

文档评论(0)

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

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

1亿VIP精品文档

相关文档