- 1、本文档共57页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
第9章排序总体要求:熟悉排序的定义和基本概念熟练掌握插入排序、交换排序、选择排序的算法核心技能点:排序方法应用于实际问题的能力扩展技能点:排序方法C语言环境的实现1
相关知识点:C语言数组的知识C语言结构体的知识C语言函数的知识学习重点:插入排序的希尔排序交换排序的快速排序选择排序的堆排序2
9.1排序的基本概念排序(Sorting)是把一个无序的数据元素序列按某个关键字进行有序(递增或递减)排列的过程。排序中经常把数据元素称为记录(Record)。把记录中作为排序依据的某个数据项称为排序关键字,简称关键字(Key)。排序时选取哪一个数据项作为关键字,应根据具体情况而定。例如,表9.1为某次考试成绩表,表中每个学生的记录包括考号、姓名、三门课成绩以及这三门课的总分。3
以“考号”作为关键字排序,可以快速查找到某个学生的成绩,因为考号可以惟一识别一个学生的记录。若想以“总分”排列名次,就应把“总分”作为关键字对成绩表进行排序。4表9.1学生学期成绩表考号姓名英语数学微机总分010李明898091260202王小萌769268236103张炎788577240204赵沼948298274011王丽778990256
待排序的记录可以是任意的数据类型,其关键字可以是整型,实型,实符型等基本数据类型,通过排序可以构造一种新的按关键字有序的排列。如果待排序的记录序列中,存在关键字相同的记录,ai、aj,(ki=kj,i≠j,i<j),若经过排序后,ai、aj的相对次序保持不变,则称这种排序方法是稳定的,否则,此排序方法是不稳定的。例如,有一序列(10,45,12,32,45,78),其中45和45是不同纪录的关键字。排序前45在序列中的位置领先于45,排序后的新序列若为(10,12,32,45,45,78),45的位置仍领先于45,则称这种排序方法是稳定的;反之,如果数据序列变为(10,12,32,45,45,78),此排序方法是不稳定的。5
排序的方式根据待排记录数量不同可以分为两类:⑴在排序过程中,只使用计算机的内存储器存放待排序的记录,称为内部排序。内部排序用于排序的记录个数较少时,全部排序可放在内存中完成,不涉及外存储器,因此,排序速度快。⑵当排序的记录数很大时,全部记录不能同时存放在内存中,需要借助外存储器,也就是说排序过程中不仅要使用内存,还要使用外存,记录要在内、外存之间移动,这种排序成为外部排序。外部排序运行速度较慢。本章只讨论内部排序,不涉及外部排序。6
内部排序的方法很多,但不论哪种排序过程,通常都要进行两种基本操作:⑴比较两个记录关键字的大小。⑵根据比较结果,将记录从一个位置移到另一个位置。所以,在分析排序算法的时间复杂度时,主要分析关键字的比较次数和记录的移动次数。7
特别需要说明的是:本章介绍的排序算法都是采用顺序存储结构,即用数组存储,且按关键字递增排序,函数中记录类型及数组结构定义如下:#defineMaxSize100/*MaxSize线性表可能达到的最大长度*/typedefstructRecordNode{keyTypekey;DataTypedata;}RecordNode;RecordNoder[MaxSize];这里的keyType和DataType可以是任何相应的数据类型,如int,float及char等。8
9.2插入排序插入排序的基本思想是:按关键字的大小将一个记录插入到一个有序的记录序列中,使得插入后的记录序列仍然有序。要寻找适当的插入位置,可以采用顺序查找,也可以采用折半查找,相应地,插入排序有直接插入排序和折半插入排序。另外,还有一种插入排序法—希尔排序。9
9.2.1直接插入排序直接插入排序(StraightInsertionSort)是最简单的排序方法之一。其基本思想是:在有序区中进行顺序查找,以确定插入的位置,然后移动记录腾出空间,以便插入关键字相应的记录。例9.1设有6个待排序的记录,它们排序的关键字序列为{20,6,15,7,3,6}。在顺序查找中,为了防止循环变量越界,在有序区前段增设了一个“岗哨”temp,暂存当前待插入的记录,具体的排序过程如图9.1所示。10
11图9.1直接插入排序示例从例9.1看出:①直接插入排序是从第二个纪录开始的,对记录数为6的序列,需要进行5趟排序才能完成。②6和6的相对位置没有变化,因此,直接插入排序是稳定的排序方法。
直接插入排序程序如下。voidInsertSort(RecordNodea[],intn)/*用直接插入法对a[0]--a[n-1]排序*/{inti,j;RecordNodet
文档评论(0)