内部排序-数据结构DATASTRUCTURE.ppt
《内部排序-数据结构DATASTRUCTURE.ppt》由会员分享,可在线阅读,更多相关《内部排序-数据结构DATASTRUCTURE.ppt(49页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、 数据结构数据结构 (DATA STRUCTURE)计算机科学与技术学院计算机科学与技术学院课程代码:0600060第十章第十章 排序排序概述概述 插入排序插入排序 交换排序交换排序 选择排序选择排序 归并排序归并排序 基数排序基数排序2课程代码:060006010.1 概述概述1)1)基本概念基本概念n n排排排排序序序序:将将将将一一一一组组组组记记记记录录录录按按按按相相相相应应应应关关关关键键键键字字字字的的的的值值值值递递递递增增增增或或或或递递递递减减减减次序重新排列的过程。次序重新排列的过程。次序重新排列的过程。次序重新排列的过程。n n关关关关键键键键字字字字(key):(ke
2、y):通通通通常常常常数数数数据据据据对对对对象象象象有有有有多多多多个个个个属属属属性性性性域域域域,即即即即多多多多个个个个数数数数据据据据成成成成员员员员组组组组成成成成,其其其其中中中中有有有有一一一一个个个个属属属属性性性性域域域域可可可可用用用用来来来来区区区区分分分分对象对象对象对象,作为排序依据。该域即为关键字。,作为排序依据。该域即为关键字。,作为排序依据。该域即为关键字。,作为排序依据。该域即为关键字。n n排序算法的稳定性排序算法的稳定性:如果在对象序列中有两个对如果在对象序列中有两个对象象ri和和rj,它们的关键字,它们的关键字 ki=kj,且在排,且在排序之前,对象序
3、之前,对象ri排在排在rj前面。如果在排序之后,前面。如果在排序之后,对象对象ri仍在对象仍在对象rj的前面,则称这个排序方法的前面,则称这个排序方法是稳定的,否则称这个排序方法是不稳定的。是稳定的,否则称这个排序方法是不稳定的。3课程代码:0600060 2 2)排序方法的分类)排序方法的分类n n根据排序时使用的存储器不同,分为:根据排序时使用的存储器不同,分为:根据排序时使用的存储器不同,分为:根据排序时使用的存储器不同,分为:内部排序内部排序内部排序内部排序:在内存实现,数据对象全部存放在内存,无在内存实现,数据对象全部存放在内存,无在内存实现,数据对象全部存放在内存,无在内存实现,数
4、据对象全部存放在内存,无内外存数据交换;适合少量数据,速度快。内外存数据交换;适合少量数据,速度快。内外存数据交换;适合少量数据,速度快。内外存数据交换;适合少量数据,速度快。外部排序外部排序外部排序外部排序:排序期间全部对象太多,不能同时存放在内排序期间全部对象太多,不能同时存放在内排序期间全部对象太多,不能同时存放在内排序期间全部对象太多,不能同时存放在内存,必须根据排序过程的要求,不断在内外存之间移存,必须根据排序过程的要求,不断在内外存之间移存,必须根据排序过程的要求,不断在内外存之间移存,必须根据排序过程的要求,不断在内外存之间移动;适合大量数据,速度慢。动;适合大量数据,速度慢。动
5、;适合大量数据,速度慢。动;适合大量数据,速度慢。n n按实现策略,内排序分五大类:按实现策略,内排序分五大类:按实现策略,内排序分五大类:按实现策略,内排序分五大类:插入排序插入排序插入排序插入排序:直接插入、直接插入、直接插入、直接插入、shellshell排序排序排序排序 交换排序:冒泡、快速排序交换排序:冒泡、快速排序交换排序:冒泡、快速排序交换排序:冒泡、快速排序 选择排序:简单选择、树型选择、堆排序选择排序:简单选择、树型选择、堆排序选择排序:简单选择、树型选择、堆排序选择排序:简单选择、树型选择、堆排序 归并排序:归并排序:归并排序:归并排序:基数排序:基数排序:基数排序:基数排
6、序:4课程代码:0600060n n按排序所需工作量,内排序分为:按排序所需工作量,内排序分为:按排序所需工作量,内排序分为:按排序所需工作量,内排序分为:简单排序方法简单排序方法简单排序方法简单排序方法:O(n:O(n2 2)简单排序简单排序简单排序简单排序 先进排序方法先进排序方法先进排序方法先进排序方法:O(nlogn):O(nlogn)堆排序、快速排序堆排序、快速排序堆排序、快速排序堆排序、快速排序 基数排序方法基数排序方法基数排序方法基数排序方法:O(dn):O(dn)基数排序基数排序基数排序基数排序3 3)排序算法的评价标准)排序算法的评价标准n n时间复杂度时间复杂度时间复杂度时
7、间复杂度:排序的时间开销用算法执行中的排序的时间开销用算法执行中的排序的时间开销用算法执行中的排序的时间开销用算法执行中的数据数据数据数据比较次数比较次数比较次数比较次数与与与与数据移动次数数据移动次数数据移动次数数据移动次数来衡量。来衡量。来衡量。来衡量。n n空间复杂度空间复杂度空间复杂度空间复杂度:算法执行时所需的附加空间算法执行时所需的附加空间算法执行时所需的附加空间算法执行时所需的附加空间。n n稳定性稳定性稳定性稳定性:n n简单性简单性简单性简单性:5课程代码:0600060 4 4)本书中待排序数据表的数据类型描述)本书中待排序数据表的数据类型描述#define Maxsize
8、 50 /待排序序列中记录的最大个数待排序序列中记录的最大个数 待排序表中每个数据元素的数据类型定义待排序表中每个数据元素的数据类型定义typedef struct int key;/表示排序关键字表示排序关键字 elemtype otherinfo;/排序记录中的其他所有数据项排序记录中的其他所有数据项 Snode;待排序数据表的数据类型定义待排序数据表的数据类型定义typedef struct Snode RMaxsize+1;/存放待排序全体记录存放待排序全体记录 int length;/排序记录个数排序记录个数 SList;6课程代码:060006010.2 插入排序插入排序(Inse
9、rt Sorting)1)基本思想:基本思想:将一个记录将一个记录将一个记录将一个记录插入插入插入插入到已排好序的到已排好序的到已排好序的到已排好序的有序表有序表有序表有序表中中中中,从而得到一个新的、记录数增,从而得到一个新的、记录数增,从而得到一个新的、记录数增,从而得到一个新的、记录数增1 1的有序表。的有序表。的有序表。的有序表。将顺序存储的将顺序存储的将顺序存储的将顺序存储的 n n 个待排序记录划分为个待排序记录划分为个待排序记录划分为个待排序记录划分为两个区间两个区间两个区间两个区间:一个有:一个有:一个有:一个有序区,一个无序区序区,一个无序区序区,一个无序区序区,一个无序区;
10、初始时:有序区为初始时:有序区为初始时:有序区为初始时:有序区为RR1 1,无序区为,无序区为,无序区为,无序区为RR2 2.R.Rn n,令,令,令,令 i i 指向无序区中第一个记录,初值指向无序区中第一个记录,初值指向无序区中第一个记录,初值指向无序区中第一个记录,初值 i i=2=2。当当当当i i n n时,重复执行:时,重复执行:时,重复执行:时,重复执行:将当前无序区中第一个记录将当前无序区中第一个记录将当前无序区中第一个记录将当前无序区中第一个记录 R Ri i 插入到有序区的插入到有序区的插入到有序区的插入到有序区的适当位置适当位置适当位置适当位置,使有序区变为:使有序区变为
11、:使有序区变为:使有序区变为:RR1 1.R.Ri i,无序区变为,无序区变为,无序区变为,无序区变为RRi+1i+1.R.Rn n。当当当当i in n时,有序区变为时,有序区变为时,有序区变为时,有序区变为RR1 1.R.Rn n,排序结束。,排序结束。,排序结束。,排序结束。直接插入排序直接插入排序7课程代码:06000602)逐步求精:)逐步求精:将将 Ri 插入到有序区插入到有序区R1.Ri-1中中适适当位置当位置,即保持仍然有序。,即保持仍然有序。具体做法:当插入第具体做法:当插入第 i 个对象时,前面的个对象时,前面的 R1,R2.Ri-1已经排好序。这时,用已经排好序。这时,用
12、 Ri 的关键字与的关键字与Ri-1,Ri-2,的关键字顺序进行比较,若比的关键字顺序进行比较,若比 Ri 的关键字大,就后移一个位置,如此重复,的关键字大,就后移一个位置,如此重复,直到找到直到找到适当的插入位置适当的插入位置,即将,即将Ri插入。插入。8课程代码:0600060排序过程演示:排序过程演示:9课程代码:0600060 3)算法实现:)算法实现:void InsertSort(SqList&L)for(i=2;i=L.length;i+)if(L.Ri.key L.Ri-1.key)/小于时小于时,将将Ri插入有序表插入有序表 L.R0=L.Ri;/R0作监测哨兵作监测哨兵 f
13、or(j=i-1;L.R0.key L.Rj.key;j-)L.Rj+1=L.Rj;/*记录后移记录后移*/L.Rj+1=L.R0;/*插插入入到到正正确确位位置置*/10课程代码:06000604)算法分析算法分析n n时间复杂度:时间复杂度:时间复杂度:时间复杂度:设待排序对象个数为设待排序对象个数为设待排序对象个数为设待排序对象个数为 n n,则共需,则共需,则共需,则共需n n-1-1 趟插入排序。每趟排序过程中关键字比较趟插入排序。每趟排序过程中关键字比较趟插入排序。每趟排序过程中关键字比较趟插入排序。每趟排序过程中关键字比较次数和对象移动次数与对象的初始排列有关。次数和对象移动次数
14、与对象的初始排列有关。次数和对象移动次数与对象的初始排列有关。次数和对象移动次数与对象的初始排列有关。最好情况最好情况最好情况最好情况(正序正序正序正序):):最坏情况最坏情况最坏情况最坏情况(逆序逆序逆序逆序):):n n空间复杂度:空间复杂度:空间复杂度:空间复杂度:使用了一个临时空间使用了一个临时空间使用了一个临时空间使用了一个临时空间 O(1)O(1)n n稳定性:稳定性:稳定性:稳定性:直接插入排序是一种直接插入排序是一种直接插入排序是一种直接插入排序是一种稳定稳定稳定稳定的排序方的排序方的排序方的排序方法。法。法。法。11课程代码:0600060 希尔排序希尔排序(缩小增量法)缩小
15、增量法)1)基本思想:)基本思想:先将整个待排序记录序列先将整个待排序记录序列先将整个待排序记录序列先将整个待排序记录序列分割成若干分割成若干分割成若干分割成若干子序列子序列子序列子序列分别进行直接插入排序,待整个序列分别进行直接插入排序,待整个序列分别进行直接插入排序,待整个序列分别进行直接插入排序,待整个序列“基本基本基本基本有序有序有序有序”时,再对时,再对时,再对时,再对全体记录全体记录全体记录全体记录进行一次直接插入排序。进行一次直接插入排序。进行一次直接插入排序。进行一次直接插入排序。排序过程:排序过程:排序过程:排序过程:先将整个待排序记录先将整个待排序记录先将整个待排序记录先将
16、整个待排序记录以以以以d d1为步长分成若干子序列为步长分成若干子序列为步长分成若干子序列为步长分成若干子序列,把所把所把所把所有相隔为有相隔为有相隔为有相隔为d d1的记录放在同一组内;的记录放在同一组内;的记录放在同一组内;的记录放在同一组内;在每个在每个在每个在每个分组内进行直接插入分组内进行直接插入分组内进行直接插入分组内进行直接插入排序;排序;排序;排序;在将整个待排序记录序列在将整个待排序记录序列在将整个待排序记录序列在将整个待排序记录序列以以以以d d2(d(d2dd1n)r2.keyr1.keyr2.key,则则则则交换交换交换交换;然后比;然后比;然后比;然后比较第二个记录与
17、第三个记录;依次类推,直至第较第二个记录与第三个记录;依次类推,直至第较第二个记录与第三个记录;依次类推,直至第较第二个记录与第三个记录;依次类推,直至第n-1n-1个记录和第个记录和第个记录和第个记录和第n n个记录比较为止个记录比较为止个记录比较为止个记录比较为止第一趟冒泡排序第一趟冒泡排序第一趟冒泡排序第一趟冒泡排序,结果关键字最大的记录被安置在最后一个记录上结果关键字最大的记录被安置在最后一个记录上结果关键字最大的记录被安置在最后一个记录上结果关键字最大的记录被安置在最后一个记录上 对前对前对前对前n-1n-1个记录进行第二趟冒泡排序,结果使关键字个记录进行第二趟冒泡排序,结果使关键字
18、个记录进行第二趟冒泡排序,结果使关键字个记录进行第二趟冒泡排序,结果使关键字次大的记录被安置在第次大的记录被安置在第次大的记录被安置在第次大的记录被安置在第n-1n-1个记录位置个记录位置个记录位置个记录位置 重复上述过程,直到重复上述过程,直到重复上述过程,直到重复上述过程,直到“在一趟排序过程中没有进行在一趟排序过程中没有进行在一趟排序过程中没有进行在一趟排序过程中没有进行过交换记录的操作过交换记录的操作过交换记录的操作过交换记录的操作”为止为止为止为止16课程代码:06000602)算法实现)算法实现void bubble_Sort(int a,int n)/起泡排序算法起泡排序算法起泡
19、排序算法起泡排序算法 for(int i=n-1,change=1;i=1&change;i-)change=0;for(j=0;j aj+1)Swap(j+1,j);/发生逆序发生逆序发生逆序发生逆序 change=1;/做做做做“发生了交换发生了交换发生了交换发生了交换”标志标志标志标志 17课程代码:0600060排序过程演示:排序过程演示:18课程代码:06000603)算法分析)算法分析n n时间复杂度:时间复杂度:最好情况最好情况最好情况最好情况(正序正序正序正序):算法只执行一趟排序,做算法只执行一趟排序,做算法只执行一趟排序,做算法只执行一趟排序,做 n-1 n-1 次关键字比
20、较,不移动对象。次关键字比较,不移动对象。次关键字比较,不移动对象。次关键字比较,不移动对象。最坏情况最坏情况最坏情况最坏情况(逆序逆序逆序逆序):):算法执行了算法执行了算法执行了算法执行了n-1n-1趟起泡,第趟起泡,第趟起泡,第趟起泡,第 i i 趟趟趟趟(1(1 i i n)n)做了做了做了做了 n-i n-i 次关键字比较,执行了次关键字比较,执行了次关键字比较,执行了次关键字比较,执行了n-i n-i 次对象交换。次对象交换。次对象交换。次对象交换。n n总的关键字比较次数总的关键字比较次数总的关键字比较次数总的关键字比较次数:n n总的对象移动次数为:总的对象移动次数为:总的对象
21、移动次数为:总的对象移动次数为:n n空间复杂度:空间复杂度:O(1)n n稳定性:稳定稳定性:稳定19课程代码:0600060 快速排序快速排序(Quick Sort)1)基本思想:)基本思想:通过一趟排序,将待排通过一趟排序,将待排序记录序记录分割分割成独立的两部分,其中成独立的两部分,其中一一部分记录的关键字均比另一部分记录部分记录的关键字均比另一部分记录的关键字小,的关键字小,则可分别对这两部分记则可分别对这两部分记录进行排序,以达到整个序列有序。录进行排序,以达到整个序列有序。20课程代码:0600060排序过程演示:排序过程演示:21课程代码:06000602)算法分析:)算法分析
22、:n n时间复杂度:平均时间复杂度是时间复杂度:平均时间复杂度是O(nlog2n)。实验结果表明:实验结果表明:就平均计算时间而言,快速就平均计算时间而言,快速排序是我们所讨论所有内排序方法中最好的排序是我们所讨论所有内排序方法中最好的一个一个。n n空间复杂度:空间复杂度:快快快快速速速速排排排排序序序序是是是是递递递递归归归归的的的的,需需需需要要要要有有有有一一一一个个个个栈栈栈栈存存存存放放放放每每每每层层层层递递递递归调用时的指针和参数。归调用时的指针和参数。归调用时的指针和参数。归调用时的指针和参数。最最最最大大大大递递递递归归归归调调调调用用用用层层层层次次次次数数数数与与与与递
23、递递递归归归归树树树树的的的的深深深深度度度度一一一一致致致致,理理理理想想想想情情情情况况况况为为为为 loglog2 2(n n+1)+1)。因因因因此此此此,要要要要求求求求存存存存储储储储开开开开销销销销为为为为 O(logO(log2 2n n)。最坏情况将达到。最坏情况将达到。最坏情况将达到。最坏情况将达到O(O(n n)。n n稳定性:稳定性:快速排序是一种快速排序是一种不稳定不稳定的排序方法。的排序方法。22课程代码:060006010.4 选择排序选择排序n n基本思想:基本思想:每一趟排序每一趟排序(如第如第 i 趟,趟,i=1,2,n-1-1)在在 n-i+1 个待排序对
24、象中选出关键字最小的对个待排序对象中选出关键字最小的对象象,作为有序序列的第作为有序序列的第 i 个对象。个对象。待第待第 n-1 趟排序后,待排序对象只剩下趟排序后,待排序对象只剩下1个,个,就不用再选了。就不用再选了。23课程代码:06000601)基本思想:)基本思想:直接选择排序是一种简单的直接选择排序是一种简单的排序方法,它的基本步骤是:排序方法,它的基本步骤是:把顺序存储的把顺序存储的 n 个待排序的记录看成由一个个待排序的记录看成由一个有序区有序区和一个和一个无序区无序区组成。初始时,有序区组成。初始时,有序区为空,无序区为为空,无序区为(R1,R2,Rn);在一趟选择排序中,从
25、无序区在一趟选择排序中,从无序区选出一个关键选出一个关键字最小的记录字最小的记录,把它放到有序区的,把它放到有序区的表尾;表尾;经过经过 n-1 趟选择和插入后,趟选择和插入后,n个记录变为递增个记录变为递增有序。有序。直接选择排序直接选择排序24课程代码:0600060排序过程演示:排序过程演示:25课程代码:06000602)算法分析)算法分析 n n时间复杂度:时间复杂度:记录移动次数记录移动次数记录移动次数记录移动次数n n 最好情况:最好情况:最好情况:最好情况:0 0n n 最坏情况:最坏情况:最坏情况:最坏情况:3(n-1)3(n-1)比较次数:比较次数:比较次数:比较次数:直接
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 内部 排序 数据结构 DATASTRUCTURE
限制150内