第二十八讲插入排序_第1页
第二十八讲插入排序_第2页
第二十八讲插入排序_第3页
第二十八讲插入排序_第4页
第二十八讲插入排序_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、数据结构数据结构系内数据结构学习网站:系内数据结构学习网站:00:8080/ds滨州学院计算机科学技术系第十章第十章 排序排序 插入排序插入排序滨州学院计算机科学技术系本讲内容本讲内容1.排序的相关概念及术语排序的相关概念及术语2.插入排序插入排序l直接插入排序直接插入排序l折半插入排序折半插入排序l希尔排序希尔排序滨州学院计算机科学技术系1. 排序的相关概念及术语排序的相关概念及术语l排序是计算机内经常进行的一种操作,排序是计算机内经常进行的一种操作,其目的是将一组其目的是将一组“无序无序”的记录序列的记录序列调整为调整为“有序有序”的记录序列。的记录序列。滨州学

2、院计算机科学技术系 一般情况下,一般情况下,假设含假设含n n个记录的序列为个记录的序列为 R1, R2, , Rn 其相应的关键字序列为其相应的关键字序列为 K1, K2, ,Kn 这些关键字相互之间可以进行比较,即在这些关键字相互之间可以进行比较,即在它们之间存在着这样一个关系它们之间存在着这样一个关系 : Kp1Kp2Kpn按此固有关系将上式记录序列重新排列为按此固有关系将上式记录序列重新排列为 Rp1, Rp2, ,Rpn 的操作称作排序的操作称作排序。1. 排序的相关概念及术语排序的相关概念及术语滨州学院计算机科学技术系l数据表数据表( (datalistdatalist):): 它

3、是待排序数据对象的有它是待排序数据对象的有限集合。限集合。l关键字关键字(key):(key): 通常数据对象有多个属性域,通常数据对象有多个属性域,即多个数据成员组成,其中有一个属性域可用即多个数据成员组成,其中有一个属性域可用来区分对象,作为排序依据。该域即为关键字。来区分对象,作为排序依据。该域即为关键字。每个数据表用哪个属性域作为关键字,要视具每个数据表用哪个属性域作为关键字,要视具体的应用需要而定。即使是同一个表,在解决体的应用需要而定。即使是同一个表,在解决不同问题的场合也可能取不同的域做关键字。不同问题的场合也可能取不同的域做关键字。1. 排序的相关概念及术语排序的相关概念及术语

4、滨州学院计算机科学技术系l主关键字主关键字: : 如果在数据表中各个对象的关键字互不如果在数据表中各个对象的关键字互不相同,这种关键码即主关键字。按照主关键字进行排相同,这种关键码即主关键字。按照主关键字进行排序,排序的结果是唯一的。序,排序的结果是唯一的。l次关键字次关键字: : 数据表中有些对象的关键字可能相同,数据表中有些对象的关键字可能相同,这种关键字称为次关键字。按照次关键字进行排序,这种关键字称为次关键字。按照次关键字进行排序,排序的结果可能不唯一。排序的结果可能不唯一。l排序算法的稳定性排序算法的稳定性: : 如果在对象序列中有两个对象如果在对象序列中有两个对象ri和和rj,它们

5、的,它们的关键字关键字 ki = kj,且在排序之前,对象,且在排序之前,对象ri排在排在rj前面前面。如果在排序之后,对象如果在排序之后,对象ri仍在对象仍在对象rj的前面,的前面,则则称这个排序方法是稳定的,否则称这个排序方法是不稳定称这个排序方法是稳定的,否则称这个排序方法是不稳定的。的。滨州学院计算机科学技术系 若若整个排序过程不需要访问外存整个排序过程不需要访问外存便能完成,便能完成,则称此类排序问题则称此类排序问题为内部排序;为内部排序; 反之,若参加排序的记录数量很大,整个反之,若参加排序的记录数量很大,整个序列的排序过程序列的排序过程不可能在内存中完成不可能在内存中完成,则称此

6、,则称此类排序问题类排序问题为外部排序为外部排序。1. 排序的相关概念及术语排序的相关概念及术语滨州学院计算机科学技术系内部排序的方法内部排序的方法内部排序的过程是一个逐步扩大内部排序的过程是一个逐步扩大记录的有序序列长度的过程。记录的有序序列长度的过程。经过一趟排序经过一趟排序有序序列区无 序 序 列 区有序序列区无 序 序 列 区滨州学院计算机科学技术系 基于不同的基于不同的“扩大扩大” 有序序列有序序列长度的方法,内部排序方法大致可长度的方法,内部排序方法大致可分下列几种类型:分下列几种类型:插入类插入类交换类交换类选择类选择类 归并类归并类其它方法其它方法滨州学院计算机科学技术系排序过

7、程中需进行的操作排序过程中需进行的操作l比较关键字大小比较关键字大小l移动记录移动记录l排序原则:尽量避免移动操作排序原则:尽量避免移动操作滨州学院计算机科学技术系有序序列有序序列R1.i-1Ri无序序列无序序列 Ri.n一趟直接插入排序的基本思想:一趟直接插入排序的基本思想:有序序列有序序列R1.i无序序列无序序列 Ri+1.n2. 插入排序插入排序滨州学院计算机科学技术系实现实现“一趟插入排序一趟插入排序”可分三步进可分三步进行:行:3将将Ri 插入插入(复制复制)到到Rj+1的位置上的位置上。2将将Rj+1.i-1中的所有中的所有记录记录均均后移后移 一个位置;一个位置;1在在R1.i-

8、1中中查找查找Ri的插入位置的插入位置j+1, R1.j.key Ri.key Rj+1.i-1.key;滨州学院计算机科学技术系直接插入排序直接插入排序(基于顺序查找)(基于顺序查找)2-路插入排序(折半排序的改进)不同的具体实现方法导致不同的算法描述不同的具体实现方法导致不同的算法描述折半插入排序折半插入排序(基于折半查找)(基于折半查找)希尔排序希尔排序(基于逐趟缩小增量)(基于逐趟缩小增量)滨州学院计算机科学技术系l利用利用 “顺序查找顺序查找”实现实现“在在R1.i-1中中查找查找Ri的插入位置的插入位置”2. 插入排序插入排序- 直接插入排序直接插入排序滨州学院计算机科学技术系从从

9、Ri-1起向前进行顺序查找,起向前进行顺序查找, 监视哨设置在监视哨设置在R0;R0 = Ri; / 设置“哨兵”循环结束表明循环结束表明Ri的插入位置为的插入位置为 j +1R0jRifor (j=i-1; R0Rj; -j); / 从后往前找j=i-1插入位置插入位置滨州学院计算机科学技术系 对于在查找过程中找到的那些关键对于在查找过程中找到的那些关键字不小于字不小于Ri.key的记录,并在查找的的记录,并在查找的同时实现记录向后移动;同时实现记录向后移动;for (j=i-1; R0Rj; -j); Rj+1 = Rj;R0jRij= i-1上述循环结束后可以直接进行上述循环结束后可以直

10、接进行“插入插入”插入位置插入位置滨州学院计算机科学技术系令令 i = 2,3,, n, 实现整个序列的排序。实现整个序列的排序。for ( i=2; i=n; +i ) if (RiRi-1) 在 R1.i-1中查找Ri的插入位置; 插入Ri ; 滨州学院计算机科学技术系void InsertionSort ( int &L, int n) / 对顺序表 L 作直接插入排序。 for ( i=2; i=n; +i ) if (L i Li-1) / InsertSortL0 = Li; / 复制为监视哨for ( j=i-1; L0 Lj; - j ) Lj+1 = Lj; / 记录

11、后移Lj+1 = L0; / 插入到正确位置滨州学院计算机科学技术系各趟排序结果各趟排序结果0 1 2 3 4 5 60 1 2 3 4 5 6 temp250 1 2 3 4 5 6 temp49滨州学院计算机科学技术系25*0 1 2 3 4 5 60 1 2 3 4 5 6 temp160 1 2 3 4 5 6 temp0825*1608滨州学院计算机科学技术系16490 1 2 3 4 50 1 2 3 4 5 6 temp0 1 2 3 4 5 6 temp1616滨州学院计算机科学技术系2525*0 1 2 3 4 5 60 1 2 3 4 5 6 temp0 1 2 3 4 5

12、 6 temp21161616滨州学院计算机科学技术系最好的情况(关键字在记录序列中顺序有序):最好的情况(关键字在记录序列中顺序有序):“比较”的次数:最坏的情况(关键字在记录序列中逆序有序):最坏的情况(关键字在记录序列中逆序有序):“比较”的次数:112nni02) 1)(4() 1(2nnini“移动”的次数:“移动”的次数:2) 1)(4() 1(2nnini2i直接插入排序的时间分析:直接插入排序的时间分析:滨州学院计算机科学技术系 因为 R1.i-1 是一个按关键字有序的有序序列,则可以利用折半查找折半查找实现“在R1.i-1中查找查找Ri的插入位置”,如此实现的插入排序为折半插

13、折半插入入排序。2. 插入排序插入排序- 折半插入排序折半插入排序滨州学院计算机科学技术系void BiInsertionSort ( int &L ,int n ) / BiInsertionSort在在 L.r1.i-1中折半查找插入位置;中折半查找插入位置;for ( i=2; i=high+1; -j ) Lj+1 = Lj; / 记录后移Lhigh+1 = L0; / 插入滨州学院计算机科学技术系low = 1; high = i-1;while (low=high) m = (low+high)/2; / 折半if (L0 Lm) high = m-1; / 插入点在低半区

14、else low = m+1; / 插入点在高半区滨州学院计算机科学技术系希尔排序方法又称为缩小增量的插入排序。基希尔排序方法又称为缩小增量的插入排序。基本思想:对待排记录序列先作本思想:对待排记录序列先作“宏观宏观”调整,再调整,再作作“微观微观”调整。所谓调整。所谓“宏观宏观”调整,指的是,调整,指的是,“跳跃式跳跃式”的插入排序。的插入排序。 设待排序对象序列有设待排序对象序列有n个对象,首先取一个整个对象,首先取一个整数数 d =1) for ( i=dk+1; i=n; +i ) if ( Li0&(L0Lj); j-=dk) Lj+dk = Lj; / 记录后移,查找插入位置记录后移,查找插入位置 Lj+dk = L0; / 插入

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论