- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
4.4 归并分类 问题描述及一般方法思想(直接插入法) 直接插入算法描述及实例 归并分类算法思想、描述及实例 合并算法思想、描述及实例 归并分类算法的计算时间 归并分类算法的缺点及改进方法 以比较为基础分类的时间下界 问题描述及一般方法 问题描述:给定一个含有n个元素的集合,要求把它们按一定的次序分类(如非降次序)。 一般方法(直接插入法) for j←2 to n do 将A(j)放入已分类A(1:j-1) repeat 最坏情况下,为了插入A(j),有可能移动A(1:j-1)中的所有元素。 算法4.7 插入分类算法描述 procedure INSERTIONSORT(A, n) A[0] ← -∞; for j ← 2 to n do item ← A[j]; i ← j-1 while ( itemA[i]) do A[i+1] ← A[i]; i ← i-1; repeat A[i+1] ← item repeat end INSERTIONSORT 数组元素的移动 插入排好序的值 item保存当前元素值 A[0] A[1] A[2] A[3] A[4] A[5] -∞ 6 3 9 4 1 3 6 3 9 4 49, A[4]=A[3]; 9 36, A[2]=A[1]; 6 4 96, 不用移动 1 19, A[5]=A[4]; 9 6 4 3 1 3-∞, A[1]=3 46, A[3]=A[2]; 43, A[2]=4 16, A[4]=A[3]; 14, A[3]=A[2]; 13, A[2]=A[1]; 1-∞, A[1]=1 注:加一个元素A[0] 从元素A[2]开始比较 插入分类的一个实例 插入分类算法的计算时间 procedure INSERTIONSORT(A, n) A[0] ← -∞; for j ← 2 to n do item ← A[j]; i ← j-1 while ( itemA[i]) do A[i+1] ← A[i]; i ← i-1; repeat A[i+1] ← item repeat end INSERTIONSORT 可能比较1~j次(j=2,3…n) 最好情况Ω(n) 最坏情况的计算时间:2+…+n=(n(n+1)/2)-1=Θ(n2) 有没有其他算法?它的最坏情况的计算时间要好于插入分类算法。 分治策略设计归并分类算法 分:将A(1),…A(n)平均分为2个子集合: A(1),…,A( n/2 )和A( n/2 +1),…,A(n) 治:递归调用分类算法,将2个子集合分类 合:将2个分类的子集合并为一个分类集合 算法4.8归并分类算法描述 递归调用,分别对分解出来的两个子问题排序 合并两个已排好的序列,得到原问题的解 Procedure MERGESORT(low,high) int low, high, mid; if lowhigh then mid= (low+high)/2 call MERGESORT(low,mid) call MERGESORT(mid+1,high) call MERGE(low,mid,high) endif end MERGESORT 归并分类实例 A[1] A[2] A[3] A[4] A[5] 6 3 9 4 1 A[1] A[2] A[3] 6 3 9 A[4] A[5] 4 1 A[1] A[2] 6 3 A[3] 9 3 6 3 6 9 1 4 A[1] 6 A[2] 3 A[4] 4 A[5] 1 1 3 4 6 9 1,5 4,5 1,3 5,5 4,4 3,3 1,2 1,1 2,2 表示一次调用时的low和high的值 只含单个元素的子集合 1,1,2 4,4,5 1,2,3 1,3,5 表示MERGE调用时low, mid, high 的值 MERGESORT(low,high) MERGE(low,mid,high) 合并函数MERGE算法思想 … … A(low) … A(mid) A(mid+1) … A(high) … B(low) … B(high) j h i 如果h ≤mid 且 j ≤high,那么B(i) ←min
文档评论(0)