- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第9章 内部排序 排序:调整记录表中记录次序,使之按关键值有序(增序)。 记录表结构:SeqList类 内部排序 记录集全部在内存中(战术问题) 外部排序 记录集部分在内存中,排序过程中,需访问外存(战略问题) 稳定性:关键值相同的记录,排序前后的相对次序不变。 排序前 排序后 5 1 4 3 4 1 3 4 4 5 稳定排序 1 3 4 4 5 不稳定排序 1 插入排序 思路:起源于数据陆续达到的思路,摸牌的行为。 1.1 直接插入 1.1.1 算法思路与步骤 设已存在一个有序子序列;每趟将一个记录按关键值大小插入到有序子序列中。 初始化时,有序子序列只有一个记录; n-1趟后,有序子序列有n个记录。 初始 21 25 49 25* 8 16 第1趟 21 25 49 25* 8 16 第2趟 21 25 49 25* 8 16 第3趟 21 25 25* 49 8 16 第4趟 8 21 25 25* 49 16 第5趟 8 16 21 25 25* 49 1.1.2 算法实现 //直接插入排序 templateclass T void SeqListT::InsertSort() { int n=m_Data.size(); for(int i=1; in; i++) { T tmp=m_Data[i]; for(int j=i-1; j=0 m_Data[j]tmp; j--) m_Data[j+1]=m_Data[j]; //移位 m_Data[j+1]=tmp; } }O(n2)。 KCN:关键值比较次数 RMN:记录移动次数 比较移动有序1次趟KCN=n-1 2次趟RMN=2(n-1) 最坏 情况 记录集逆序次趟KCN=n(n-1)/2 i+2次趟RMN=(n+4)(n-1)/2 1.2 希尔排序 发明人D.L.Shell,发明于1959年 直接插入排序的缺点:每个记录被一步一步地挪到目标位置。 将记录较快地挪到目标位置的方法:加大步长。 仅仅加大步长的值,可行吗? 缩小增量法:最后一次的步长一定为1。 希尔排序:将记录序列按某个步长分成若干子序列;分别对各子序列排序。 步长的取值方法之一:n/2,n/4,……,8,4,2,1。 初始 5 6 1 7 4 8 3 2 9 第1趟 步长=4 4 6 1 2 5 8 3 7 9 第2趟 步长=2 1 2 3 6 4 7 5 8 9 第3趟 步长=1 1 2 3 4 5 6 7 8 9 1.2.2 算法实现 templateclass T void SeqListT::ShellSort() { int n=m_Data.size(); for(int step=n/2; step0; step=step/2) { for(int i=step; in; i++) { T tmp=m_Data[i]; for(int j=i-step; j=0 m_Data[j]tmp; j=j-step) m_Data[j+step] = m_Data[j]; // 记录移step位 m_Data[j+step]=tmp; } } } 1.2.3性能分析 属于不稳定排序。(各子序列彼此独立的交换) 时间复杂度:O(n1.5)…O(n1.3) 。 第9章 内部排序 3 选择排序 思路:“比较”比“赋值”速度快得多 3.1 直接选择排序 3.1.1 算法思路与步骤 每趟:在剩余序列中找到最小值,将之交换到目标位置。 n-1趟选出n-1个极值,置于相应目标位置。 初始 5 6 1 7 4 8 3 2 9 第1趟 1 6 5 7 4 8 3 2 9 第2趟 1 2 5 7 4 8 3 6 9 3.1.2 算法实现 templateclass T void SeqListT::SelectSort() { int n=m_Data.size(); for(int i=0; in-1; i++) { int min_i=i; for(int j=i+1; jn; j++) if(m_Data[j]m_Data[min_i]) min_i=j; if(i!=min_i) { T tmp=m_Data[i]; m_Data[i]=m_Data[min_i]; m_Data[min_i]=tmp; } } } 3.1.3 性能分析 时间复杂度:O(n) 空间复杂度:O( 一趟后 1 4 5 3 3
文档评论(0)