- 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
您可能关注的文档
最近下载
- 2023安徽合肥科技农村商业银行员工招聘50人笔试历年典型考题及考点剖析附带答案详解.docx VIP
- 广东省深圳市宝安中学2023-2024学年八年级上学期期中数学试题.docx VIP
- g围绕着我崇拜的人儿 简谱.pdf VIP
- 《中国铁路太原铁路局铁路营业线施工安全管理实施细则》考试题库及答案(共219题).docx VIP
- 武警防暴队形ppt课件.pptx
- 2025年工业互联网平台建设案例研究:生态构建与产业生态构建创新实践案例集.docx VIP
- T 0804-1994 无机结合料稳定材料击实试验方法.ppt VIP
- 课前预习主题班会PPT课件.pptx VIP
- 苏教版综合实践活动七年级上册《我是大侦探》.pptx VIP
- 油轮“塞加号”案评介(续).doc VIP
文档评论(0)