数据结构排序过程稿.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构排序过程稿

数据结构电子教案;内容提要;第8章 排序;8.1 排序的基本概念;1.排序; 可见,排序后关键字最小的记录R7排在序列的最前面,关键字最大的记录R3排在序列最后面。排序后整个序列按记录关键字从小到大顺序排列组成为一个有序文件。 ; 2.关键字(Key);例如,表8.1就是一个学生成绩文件。每个学生是一个记录,而每个记录则由学生证号、姓名、各科成绩和总分数据项组成。其中,学生证号是能够惟一地区别一个学生记录的数据项,是学生记录主关键字,而其他数据项则是次关键字。 表8.1 学生成绩登记表 ;关键字可用来作为排序运算的依据。选取记录中的哪一项作为排序的关键字(或排序码),应根据问题的要求而定。 例如,若将成绩登记表按学生证号排列,主关键字“学生证号”就是当前的排序码,见表8.1;若按学生的成绩总分排名次,次关键字“总分”就是当前的排序码,见表8.2。;表8.2 学生成绩统计表;一组记录按关键字递增或递减次序排列所得到的结果称为有序表,相应地,排序前的状态称为无序表。 递增的次序又称为升序或正序,递减的次序又称为降序、逆序或反序。 若有序表是按关键字升序排列的称为升序表或正序表;若按相反次序排列,则称为降序表或逆序表。; 3.排序的稳定性与不稳定性; 4.内部排序与外部排序; 5.排序方法的评价标准; 6.排序算法的存储实现;采用顺序表作为文件的存储结构时,其存储类型说明如下: #define MAX 400 /* MAX为记录数组最大数*/ typedef int datatype; /* 定义关键字类型*/ typedef struct record /* 定义记录为结构类型*/ { int key; /* 记录的关键字域*/ datatype other; /* 记录的其他域*/ }rectype ; rectype *s1, r[MAX]; /* r[MAX]数组存放原始数据,*s1存放排序后的数据*/ 注意:若不特别说明,本章所讨论的排序算法均采用顺序表作为文件的存储结构,并且按关键字递增排序。;第8章 排序;8.2 插入排序;8.2.1 直接插入排序; 算法分析: (1)如何完成每一趟的排序? (2)n个记录需要多少趟? ;2006年9月;insert_sort(rectype r[],int NUM) /* 直接插入排序 */ { int i, j; /* NUM为实际输入的记录数*/ for(i=2;i=NUM; i++) /* i=NUM条件很重要*/ { r[0]=r[i]; /* R[0]是监视哨 */ j=i-1; /* 依次插入记录R[1], …, R[NUM] */ while(r[0].keyr[j].key) /* 查找R[i]合适插入位置 */ {r[j+1]=r[j]; j--; } /* 将大于R[i].key记录后移 */ r[j+1]=r[0]; /* 将R[i]插到有序表合适位置上 */ } }/* INSERTSORT */;上述算法中记录R[0]有两个作用:一是在进入查找循环之前,它保存了R[i]的值,使得不致因记录的后移而丢失R[i]的内容;二是在while循环中“监视”下标变量j是否越界,一旦越界(即j<0),R[0]将自动控制while循环的结束,从而避免了在while循环中每一次都要检测j是否越界(即省略了循环条件j≥1)。因此,R[0]也称为“监视哨”。 采用这种程序设计技巧,使得循环条件的测试时间大约减少一半,而对于记录数较大的文件,节省的时间更加相当可观,希望能够掌握这种程序设计技巧。 ;【算法分析】;当参加排序的记录关键字已按升序排列时,这是最好的情况。在这种情况下,每趟排序过程中,while语句的循环次数为0,仅需进行一次关键字的比较,且无须后移记录。但是,在进入while循环之前,将R[i]保存到监视哨R[0]中需移动一次记录,在该循环结束之后,将监视哨R[0]插到R[j+1]中也需移动一次记录。 因此,每趟排序过程中,关键字比较次数为1,记录的移动次数为2。整个排序过程中,关键字总的比较次数最小值Cmin和记录总的移动次数最小值Mmin为:;(2)当参加排序的记录关键字按逆序排列时,这是最坏的情况。在这种情况下,第i趟排序过程中,while语句的循环次数为i,有序区中所有i-1个记录均向后移动一个位置,再加上while循环前后的两次移动,因此,在每趟排序过程中,关键字

文档评论(0)

woaitiantian + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档