- 1、本文档共11页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第9章内排序.doc
第9章 内排序
排序是数据处理过程中经常使用的一种重要运算,本章主要讨论内排序的各种算法。并对各个算法的时间和空间复杂性以及算法的稳定性等进行讨论。
重点:直接插入排序、shell排序、直接选择排序、堆排序、冒泡排序、快速排序、归并排序等。
难点:堆排序、快速排序算法的理解。
本次课主要讲解:排序的基本概念;插入排序算法;选择排序算法。
9.1 排序的基本概念
1.什么是排序(Sorting)?
简单地说,排序就是将一组杂乱无章的数据按一定的规律排列起来(递增或递减)。
确切的说所谓排序就是使一组任意排列的对象变成一组按关键字线性有序的对象。
2.主、次关键字
次关键字(Key) : 作为排序依据的数据对象中的属性域。
主关键字 :不同的数据对象若关键字互不相同,则这种关键字称为主关键字。
3.内排序和外排序
内排序:指在排序过程中所有数据均放在内存中处理,不需要使用外存的排序方法。
外排序:对于数据量很大的文件,在内存不足的情况下,则还需要使用外存,这种排序方法称为外排序。
4.算法的稳定性
排序码相同的记录,若经过排序后,这些记录仍保持原来的相对次序不变,称这个排序算法是稳定的。否则,称为不稳定的排序算法。
5.评价排序算法优劣的标准
首先考虑算法执行所需的时间(时间复杂度),它是衡量算法好坏的最重要的标志。通常用算法执行中的数据比较次数和数据移动次数来衡量。
其次考虑算法执行所需要的附加空间(空间复杂性)。
当然,保证算法的正确性是不言而喻的,可读性等也是要考虑的因素。
6.抽象数据类型
为简单起见,数据的存储结构采用记录数组形式,同时假定关键字是整数。记录数组的类型说明如下:
#define MAXSIZE 100
typedef struct{
keytype key;
}datatype; /*记录类型的定义*/
datatype a[MAXSIZE];
9.2 插入排序
基本原理,每步将一个待排序的对象,按其关键字大小,插入到前面已经排好序的一组对象适当位置上,直到对象全部插入为止。
直接插入排序(Insert Sort)
希尔排序(Shell Sort)
9.2.1直接选择排序
1.算法思想
初始可认为文件中的第0个记录己排好序,然后将第1个到第n个记录依次插入已排序的记录组成的文件中。在对第i个记录Ri进行插入时,R0,R1,…,Ri-1已排序,将记录Ri的排序码keyi与已经排好序的排序码从右向左依次比较,找到Ri应插入的位置,将该位置以后直到Ri-1各记录顺序后移,空出该位置让Ri插入。
分析:一组记录的排序码分别为: 312,126,272,226,28,165,123
初始时将第1个排序码作为已经排好序的,把排好序的数据记录放入中括号[]中,表示有序的文件,剩下的在中括号外,如下所示:
[312],126,272,226,28,165,123
设前3个记录的排序码已重新排列有序,构成一个含有3个记录的有序文件:
[126,272,312],226,28,165,123
现在要将第4个排序码226插入 !
将待插入的排序码226和已经有序的最后一个排序码312比较,因为待插入的排序码226小于312,所以226肯定要置于312的前面,至于是否就是置于312的前一个位置,此时还不能确定,需要继续向左比较;
将所有大于待插入排序码226的那两个排序码312和272依次后移一个位置,在空出的位置插入待排序的排序码226,得一含有4个记录的有序文件:
[126,226,272,312],28,165,123
需要注意的是,当待插入排序码小于所有已排序的排序码时,如在插入第5个值28时:
[126,226,272,312],28,165,123
2.算法设计的时候如何处理?
a.方法之一:判断指针是否小于零
void InsertSort(datatype a[],int n)
{ int i,j;
datatype temp;
for (i=0;in-1;i++)
{ temp=a[i+1];
j=i;
while (j-1temp.keya[j].key)
a[j+1]=a[j- -];
a[j+1]=temp;
}
}
问:temp作用是什么?
b.方法之二:设置“哨兵”
void insertsort(datatype a[], int n)
{
int i,j;
for(i=2;i=n;i++)/*依次插入从第2个开始的所有元素*/
{ j=i-1;
a[0] =a[i];/*设置哨兵,准备找插入位置*/
while(a[0].k
您可能关注的文档
- 函数与方程教学设计.doc
- 珠海市2015年普通中小学招生考试.doc
- 我国监理发展方向.doc
- 高级Excel使用技巧信息.doc
- 工程测试与信息处理]复习提纲 2.doc
- 2012南京理工理学院硕士培养方案.doc
- 2015数学最新考研大纲及解析(数三).doc
- 试论农村英语教师现状与教师专业化发展探讨.doc
- 2010高考数学难点.doc
- 常微分方程建模教学大纲.doc
- 2025中国冶金地质总局所属在京单位高校毕业生招聘23人笔试参考题库附带答案详解.doc
- 2025年01月中国人民大学文学院公开招聘1人笔试历年典型考题(历年真题考点)解题思路附带答案详解.doc
- 2024黑龙江省农业投资集团有限公司权属企业市场化选聘10人笔试参考题库附带答案详解.pdf
- 2025汇明光电秋招提前批开启笔试参考题库附带答案详解.pdf
- 2024中国能建葛洲坝集团审计部公开招聘1人笔试参考题库附带答案详解.pdf
- 2024吉林省水工局集团竞聘上岗7人笔试参考题库附带答案详解.pdf
- 2024首发(河北)物流有限公司公开招聘工作人员笔试参考题库附带答案详解.pdf
- 2023国家电投海南公司所属单位社会招聘笔试参考题库附带答案详解.pdf
- 2024湖南怀化会同县供水有限责任公司招聘9人笔试参考题库附带答案详解.pdf
- 2025上海烟草机械有限责任公司招聘22人笔试参考题库附带答案详解.pdf
文档评论(0)