数据结构课件-第10章-内部排序答案.ppt





《数据结构课件-第10章-内部排序答案.ppt》由会员分享,可在线阅读,更多相关《数据结构课件-第10章-内部排序答案.ppt(53页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、10.1 排序的定义和方法 什么是“排序”?简单说,排序是将无序的记录序列调整为有序记录序列的一种操作。例如,将下列记录序列 52,49,80,36,14,58,61,23,97,75 调整为序列 14,23,36,49,52,58,61,75,80,97 第十章第十章 内部排序内部排序一般情况下,对排序的定义为:假设含有n个记录的序列为:r1,r2,rn(10-1)它们的关键字相应为k1,k2,kn对式(10-1)的记录序列进行排序就是要确定序号1,2,n的一种排列 P1,P2,Pn使其相应的关键字满足如下的非递减(或非递增)的关系:(10-2)就是使式(10-1)的记录序列重新排列成一个按
2、关键字有序的序列 rp1,rp2,rpn (10-3)当待排序记录中的关键字(i=1,2,n)都不相同时,则任何一个记录的无序序列经排序后得到的结果是唯一;若待排序的序列中存在两个或两个以上关键字相等的记录,则排序所得到的结果不唯一。假设ki=kj(1in,1jn,ij),且在排序前的序列中,ri领先于rj(即ij)。若在排序后的序列中ri仍领先于rj,则称所用的排序方法是稳定的稳定的;反之,若可能使排序后的序列中rj领先于ri,则称所用的排序方法是不稳定的不稳定的 根据涉及的存储器不同,将排序方法分为两大类:1)内部排序内部排序:在排序进行的过程中不使用计算机外部 存储器的排序过程。2)外部
3、排序外部排序:在排序进行的过程中需要对外存进行访 问的排序过程。内部排序的方法 内部排序的过程是一个逐步扩大记录的有序序列长度的过程有序序列有序序列有序序列有序序列无序序列无序序列无序序列无序序列有序序列有序序列有序序列有序序列无序序列无序序列无序序列无序序列一趟排序 逐步扩大记录的有序序列长度排序的方法大致有一下几类:插入类、交换类、选择类、归并类、其他类将无序子序列中的一个或几个记录插入到有序序列中从而增加记录的有序子序列的长度通过交换无序序列中的记录,从而得到其中关键字最小或最大的记录,并将它加入有序子序列中,以此方法增加有序子序列的长度。从记录的无序子序列中选择关键字最小或最大的记录,
4、并将它加入有序子序列中,以此方法增加有序子序列的长度。通过归并两个或两个以上记录的有序子序列,逐步增加有序子序列的长度。按排序过程中所需的工作量来分:1)简单的排序方法 时间复杂度O(n2)2)先进的排序方法 时间复杂度O(nlogn)3)基数排序 时间复杂度O(dn)10.2 插入排序 插入排序的准则:在有序序列中插入新的记录以达到扩大有序区的长度的目的。有序序列有序序列有序序列有序序列R1.i-1R1.i-1无序序列无序序列无序序列无序序列Ri.nRi.n 有序序列有序序列有序序列有序序列R1.iR1.i无序序列无序序列无序序列无序序列一趟插入排序的基本思想:RiRi 有序序列有序序列有序
5、序列有序序列R1.i-1R1.i-1无序序列无序序列无序序列无序序列Ri.nRi.n 由此实现一趟插入排序的步骤为:1)在 R1.i-1 中查找 Ri 的插入位置,即确定j(0ji)使得 R1.j.keyRi.keyRj+1.i-1.key2)将 Rj+1.i-1 中的记录后移一个位置;3)将 Ri 插入到 j+1 的位置。为了避免在查找过程中判别循环变量是否出界,设置R0为监视哨,并在查找的同时进行记录后移,如动画flash10-2-2所示。算法算法 10.1void InsertPass(SqList&L,int i)/已知已知L.r1.i-1中的记录已按关键字非递减的顺序有序排列中的记录
6、已按关键字非递减的顺序有序排列,/本算法实本算法实 现将现将L.ri插入其中插入其中,并保持并保持L.r1.i中记录按关键字中记录按关键字非非 /递减顺序有序递减顺序有序L.r0=L.ri;/复制为哨兵for(j=i-1;L.r0.key L.rj.key;-j)L.rj+1=L.rj;/记录后移L.rj+1=L.r0;/插入到正确位置/InsertPass具体做法不同可分为以下几种插入排序方法:具体做法不同可分为以下几种插入排序方法:直接插入排序直接插入排序折半插入排序折半插入排序表插入排序表插入排序希尔排序希尔排序缩小增量插入排序10.2.1 直接插入排序直接插入排序直接插入排序利用直接插
7、入排序利用顺序查找顺序查找实现在实现在R1.i-1中查找中查找Ri的插入位置的插入位置 算法算法 10.2void InsertSort(SqList&L,int i)/对顺序表对顺序表L进行直接插入排序进行直接插入排序 for(i=2;i=L.length;+i)if(L.ri.key L.ri-1.key)L.r0=L.ri;/复制为哨兵 for(j=i-1;L.r0.key L.rj.key;-j)L.rj+1=L.rj;/记录后移 L.rj+1=L.r0;/插入到正确位置 /InsertSort最好的情况(关键字记录在序列中顺序有序)直接插入排序时间效率分析直接插入排序时间效率分析实现
8、排序的基本操作有两个:实现排序的基本操作有两个:1)比较比较序列中两个关键字的大小序列中两个关键字的大小2)移动移动记录记录最坏的情况(关键字记录在序列中逆序有序)比较比较的次数的次数移动移动的次数的次数比较比较的次数的次数移动移动的次数的次数待排记录待排记录序列状态序列状态比较比较次数次数移动移动次数次数正序n-10逆序(n+2)(n-1(n+2)(n-1)/2/2(n+4)(n-1(n+4)(n-1)/2/2一般情况下,直接插入排序的时间复杂度为O(n2)。10.2.2 折半插入排序 由于插入排序的基本思想是在一个有序序列中插入一个新的记录,则可以利用“折半查找”查询插入位置,由此得到的插
9、入排序算法为“折半插入排序”。如动画flash10-2-3所示演示过程Void BInsertSort(SqList&L)/对顺序表L进行折半插入排序for(i=2;i=L.length;+i)L.r0=L.ri;/将L.ri暂存到 L.r0 low=1;high=i-1;/折半查找插入的位置 while(low=high)m=(low+high)/2;if(L.r0.key=high+1;-j)L.rj+1=L.rj;/记录后移 L.rhigh+1=L.r0;/插入/for/BInserSort在L.r1.i-1折半查找插入位置10.2.3 表插入排序表插入排序 为了减少在排序过程中进行移动
10、记录的操作,必须改变排序过程中采用的存储结构。利用静态链表进行排序,并在排序完成之后,一次性地调整各个记录相互之间的位置,即将每个记录都调整到它们应该在的位置上 这个静态链表由存储记录的顺序表和附加的指针数组构成,静态链表中的指针实际上指的是数组的下标。表插入排序分两步进行:首先构造一个有序链表(循环链表);然后按照“附加指针”的指示将结点中的记录重新排列成一个有序序列。如动画flsh10-2-4 表插入排序的过程举例k kj ji i0 01 12 23 34 45 56 67 7R1.i-1 已经形成循环链表,Ri为要插入的记录,插入位置为Rj 与Rk之间,k指示为j的指针域所指示单元Ri
11、.next=k;Rj.next=i;k kj ji iRi.next=k;Rj.next=i;关键字关键字关键字关键字2929636318183737545412124545指针指针指针指针3 34 40 01 15 52 20 01 12 23 34 45 56 67 7关键字关键字关键字关键字2929636318183737545412124545指针指针指针指针3 34 40 01 12 20 01 12 23 34 45 56 67 7k kj ji i关键字关键字关键字关键字2929636318183737545412124545指针指针指针指针3 34 40 01 15 52 2完
12、成表插入之后,调整重新排列关键字关键字关键字关键字2929636318183737545412124545指针指针指针指针6 64 40 01 17 72 23 35 50 01 12 23 34 45 56 67 7i ip pq q29294 412123 312126 6pi为止。10.2.4 希尔排序 希尔排序又称“缩小增量排序”,它的基本思想是,先对待排序列进行“宏观调整”,待序列中的记录“基本有序”时再进行直接插入排序。例如一个含11个关键字的序列(16,25,12,30,47,11,23,36,9,18,31),先对它进行“增量为5”的插入排序(r1,r6,r11)(r2,r7)
13、(r5,r10)然后将增量“缩小到3”,(r1,r4,r7,r10)(r2,r5,r8,r11)(r3,r6,r9)之后经过最后一趟插入排序即得到有序序列希尔排序举例 之后经过最后一趟插入排序即得到有序序列(16,25,12,30,47,11,23,36,9,18,31)(11,23,12,9,18,16,25,36,30,47,31)先对它进行“增量为5”的插入排序然后将增量“缩小到3”(9,18,12,11,23,16,25,31,30,47,36)(9,11,12,16,18,23,25,30,31,36,47)过程如动画flash10-2-5算法参见教材P272 算法10.4-10.5
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课件 10 内部 排序 答案

限制150内