[高等教育]第十章 排序.ppt

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

第八章 内部排序 8.1 概述 8.1 概述 8.1 概述 排序:是将一些数据元素(或记录)的任意序列,重新排列成一个按关键字有序的序列。 例如:将下列关键字序列 52,36,80,36,14,58,61,23,97,75 调整为 14,23,36,36,52,58,61,75,80,97 8.1 概述 排序算法的分类: 按排序过程中涉及的存储器不同,可将排序方法分为两大类: 内部排序:若整个排序过程不需要访问外存便能完成,则称此类排序问题为内部排序; ?? ? 外部排序:在排序过程中,若参加排序的记录数量很大,不仅要使用内存,而且还需要访问外存的排序过程称为“外部排序。 8.1 概述 8.1 概述 内部排序的方法: 逐步扩大记录有序序列长度的方法大致有以下几类: 1、插入类:将无序子序列中的一个或几个记录“插入”到有序序列中,从而增加记录的有序子序列的长度 2、交换类:通过“交换”无序序列中的记录从而得到其中关键字最小或最大的记录,并将它加入到有序子序列中,以此方法增加记录的有序子序列的长度。 内部排序的方法: 3、选择类:从记录的无序子序列中“选择”无序子序列中关键字最小或最大的记录,并将它加入到有序子序列中,以此方法增加记录的有序子序列的长度。 4、归并类:通过“归并”两个或两个以上的记录有序子序列,逐步增加记录有序序列的长度。 5、其他方法 8.1 概述 排序算法的评价标准: ? 1. 算法的时间复杂度 ?2. 执行算法所需的附加空间 ? 3. 算法本身的复杂性 排序过程中需进行的两种基本操作: 1.比较两个关键字的大小(必须) 2.将记录从一个位置移动到另一个位置(是否需要移动记录取决于记录的存储方式) 顺序存储:必须移动记录 链式存储:不须移动记录,只需修改指针 8.1 概述 本章实现排序算法时记录所采用的存储结构: typedef struct { KeyType key; //主关键字域,KeyType为int等 … … // 其它属性域 } RecType ; 也即:本章所介绍的排序算法都是在一维结构体数组上实现的。 8.2 插入类排序 8.2.1 直接插入排序 1. 基本思想 将一个记录插入到已经排好序的有序表中,从而得到一个新的记录数增加1的有序表。 一般情况下,第i趟直接插入排序的操作为:在含有i-1个记录的有序子序列R[1...i-1]中插入一个记录R[i],变成含有i 个记录的有序子序列R[1…i]。 8.2.1 直接插入排序 8.2.1 直接插入排序 2. 算法描述 void insertsort(RecType R[], int n) { /* R[]为存放待排序数据元素(记录)的一维数组,大小为n+1,其中R[0]置空,R[1]到R[n]为待排序的n个记录*/ for(i=2;i=n;i++) /*共进行n-1趟*/ { if(R[i].keyR[i-1].key) { R[0]=R[i]; /*R[0]为监视哨*/ for( j=i-1; R[j].keyR[0].key; j- -) R[j+1]=R[j]; R[j+1]=R[0]; } } } 8.2.1 直接插入排序 3.算法分析 直接插入排序的算法简洁,容易实现。 从时间看,排序的基本操作为:比较两个记录的大小和移动记录。其中: (1)最小比较次数:Cmin = n-1 = O(n) (2)最大比较次数:Cmax =(2+3+…+n)= (n+2)(n-1)/2 = O(n2 ) (3)最小移动次数:Mmin = 0 (4)最大移动次数:Mmax = (3+…+n+n+1) = O(n2) 故:该算法适应于待排序记录的数量n很小的情况。 从空间看,直接插入排序只需一个辅助空间。 8.2.1 直接插入排序 4.改进算法 在直接插入排序的基础上,从减少“比较”和“移动”这两种操作的次数着手,可得到一些改进的插入排序算法,如: 折半插入排序

文档评论(0)

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

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

1亿VIP精品文档

相关文档