- 1、本文档共20页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
《数据结构与算法》
第9章 内部排序
-. PAGE \* MERGEFORMAT 292.-
-. PAGE \* MERGEFORMAT 294.-
第9章内部排序
本章学习要点
◆熟悉并掌握本章中各种内部排序方法的基本思想及其实现过程
◆掌握各种内部排序算法的时间复杂度和空间复杂度的计算和分析方法
◆了解各种内部排序方法的优缺点以及其不同的应用场合
◆要求能够针对实际问题的特点选择合理的排序算法并通过编程实现
排序(Sorting)是计算机程序设计中的一种重要运算,它的功能是将一组数据元素按照其关键字的某种规定顺序(递增或递减)进行排列。对数据元素进行排序的目的是为了便于查找,在关键字有序的一组数据中的查找要比无序时更容易,速度也更快。
本章主要介绍几种常用的内部排序方法,主要有:插入排序、交换排序、选择排序、归并排序和基数排序。最后对各种排序算法的时间复杂度和空间复杂度进行了分析和比较,并且讨论了如何针对实际问题合理选择排序算法等内容。
9.1排序的有关概念和数组的输入与输出
9.1.1排序的概念
1.排序
将一个数据元素的任意序列,重新排列成一个按关键字有序(递增有序或递减有序)的序列的过程叫排序。
2.排序方法的稳定性
若在排序过程中,序列的两个关键字值相同的记录的相对位置不发生改变,则称所用的排序方法为稳定的;反之,若在某个序列的排序过程中关键字值相同的记录的相对位置发生了改变,则称所用的排序方法是不稳定的。
3.内部排序和外部排序
在排序过程中,如果待排序列全部读入计算机存储器中,则称此为内部排序;反之,若待排序列仅有部分记录在内存中,在排序过程中还要对外存中的纪录进行访问,这样的排序过程叫外部排序。
4.排序方法的性能分析
对于所选用的排序方法的好坏主要是基于其算法的时间复杂度和空间复杂度两方面进行分析。
5.数据元素类型说明
数据元素可以是任意一个结构类型,排序过程是按元素中的某个关键字(数据项)进行排序。不失一般性,我们在本章的所有例题中总是假定待排序列中的数据元素中只含有关键字项,且其数据类型为整型。
9.1.2一维数组的输入与输出
1.数组输入操作
函数void Input(int *A,int n)的功能是,从键盘输入n个整数到数组A[]中。
#includeiostream.h
void Input(int *A,int n)
{ int i;
cout请输入n个整数:\n;
for(i=0;in;i++) cinA[i];
}
2.数组输出操作
函数void Output(int A[],int n)的功能是,依次显示输出数组A[]中的n个整数。
void Output(int A[],int n)
{ int i;
cout结果为:\n;
for(i=0;in;i++)coutA[i] ;
coutendl;
}
3.数组排序操作
函数void MainSort(void(*sort)(int*,int))的功能是,首先通过函数调用Input(A,n)输入n个整数到数组A[]中,再通过函数调用sort(A,n)对A[]中的n个整数排序,最后通过函数调用Out(A,n)显示输出数组A[]中的n个整数。
void MainSort(void(*sort)(int*,int))
{ int *A,n;
cout请输入整数的个数:\n;
cinn; A=new int[n];
Input(A,n);
cout原顺序; Output(A,n);
sort(A,n); //调用sort对数组A进行处理
cout排序后的顺序; Out(A,n);
delete[]A;
}
9.2插入排序法
9.2.1直接插入排序(Straight Insertion Sort)
1.算法思想
对于任意排列的序列(a0,a1,a2,…,an-1),先将第一个记录看成是一个有序序列L1=(a0),再将第2个记录插入到L1中得到有序序列L2=(a0,a1)一般的,将第k+1个记录插入到有序序列Lk中得到有序序列Lk+1,如此重复插入n-1次即可得到有序序列Ln=(a0,a1,a2,…,an-1)。
2.举例说明
设原始序列为:8、3、5、2、9、7、*5、4
第1轮:(8) 3,5,2,9,7,*5,4
第2轮:(3,8) 5,2,9,7,*5,4
第3轮:(3,5,8) 2,9,7,*5,4
第4轮:(2,3,5,8) 9,7,*5,4
第5轮:(2,3,5,8,9) 7,*5,4
第6轮:(2,3,5,7,8,9) *5,4
第7轮:(2,3,5,*5,7,8,9) 4
第8轮:(2,3,4,5,*5,7,8,9) 3
您可能关注的文档
- (感应)鼠笼式电机设计资料.docx
- (高二哲学)体现哲理意味的诗词名句资料.doc
- (高级)值班水手评估规范资料.doc
- (个股期权)保证金及各类风险值的计算说明资料.docx
- (贵阳)安全文明施工管理规定资料.doc
- (华杯)16届初一总决赛讲解版资料.doc
- (化学)2016届《步步高》高考总复习大一轮(苏教版全国)专题讲座四环境保护与绿色化学Word版含资料.docx
- 2第02章张量(第01讲)资料.pdf
- (锦州)PC-4型便携式气象站(标准)资料.doc
- 2-第4课维护和平的尝试资料.ppt
- 2025年度南漳县招聘高中(中职)学校教师(44人)模拟试卷及一套完整答案详解.docx
- 2025年度中央机关及其直属机构补充录用公务员报名即将开始模拟试卷含答案详解(研优卷).docx
- 2025年宣恩县残疾人联合会招聘公益性岗位人员的(2人)考前自测高频考点模拟试题附答案详解(模拟题).docx
- 2025年宣恩县残疾人联合会招聘公益性岗位人员的(2人)模拟试卷含答案详解(模拟题).docx
- 2025年天津中医药大学第二附属医院第二批人事代理制人员招聘方案考前自测高频考点模拟试题附答案详解(.docx
- 2025年西安石油大学辅导员招聘(第二批)(6人)笔试备考试题及答案详解(名校卷).docx
- 2025年常德市鼎城区卫生健康局所属乡镇卫生院招聘工作人员(笔试备考试题及答案详解(网校专用).docx
- 2025年广西河池罗城特聘农机技术指导员的(1人)模拟试卷及答案详解(全国通用).docx
- 2025年宁夏回族自治区中医医院暨中医研究院上半年自主招聘急需紧模拟试卷含答案详解(轻巧夺冠).docx
- 2025年度中国地质调查局自然资源综合调查指挥中心招聘社会在职人笔试备考试题附答案详解(典型题).docx
文档评论(0)