- 2
- 0
- 约3.7千字
- 约 9页
- 2019-06-14 发布于江西
- 举报
第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]; // 记录移1位
m_Data[j+1]=tmp;
}
}
1.1.3
属于稳定排序。时间复杂度是O(n2)。
KCN:关键值比较次数
RMN:记录移动次数
比较
移动
最好
情况
记录集有序
1次/趟=KCN=n-1
2次/趟=RMN=2(n-1)
最坏
情况
记录集逆序
i次/趟
=KCN=n(n-1)/2
i+2次/趟
=RMN=(n+4)(n-1)/2
1.2 希尔排序
发明人:D.L.Shell,发明于1959年。
1.2.1
直接插入排序的缺点:每个记录被一步一步地挪到目标位置。
将记录较快地挪到目标位置的方法:加大步长。
仅仅加大步长的值,可行吗?
缩小增量法:最后一次的步长一定为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
属于不稳定排序。(各子序列彼此独立的交换)
时间复杂度: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(n2)
空间复杂度:O(1)
稳定性:不稳定。示
您可能关注的文档
- 上海某别墅项目经典策划(上).doc
- 上海园区分布图 超全.ppt
- 上街区工信局业务知识考试试卷(满分150分).doc
- 稍复杂的方程(例2)课件.ppt
- 稍复杂的方程(例3)课件.ppt
- 设备英汉词汇.doc
- 设计师-职位说明书(设计公司).doc
- 社会团体负责人(秘书长以上)基本情况.doc
- 申论考试中用到的专有名词.doc
- 深圳盐田港三期工程道路、堆场联锁块铺砌施工.doc
- 统编版2025年春季新版七年级下册历史 第21课 明清时期的科技与文化 教案.docx
- 雅安雨城法院书记员招聘考试真题库2025.docx
- 2026届安徽合肥市高考一模高考语文试卷试题(含答案详解).pdf
- 【专题研究】国内外城市更新研究的最新进展.pdf
- 【专题研究】老旧城区改造居民满意度影响因素研究——以遂宁市老旧城区改造为例.pdf
- 【专题研究】关于旧城空间改造理论与创意设计案例的几点思考.pdf
- 西藏拉萨市高三下学期期末物理备考重点详解.docx
- 泾县法院书记员招聘笔试真题2025.pdf
- 2026年春【苏教版】-六年级数学下册-面积的变化.pptx
- 2026年春【苏教版】-六年级数学下册-7.pptx
原创力文档

文档评论(0)