数据结构排序.pptx
《数据结构排序.pptx》由会员分享,可在线阅读,更多相关《数据结构排序.pptx(36页珍藏版)》请在三一办公上搜索。
1、测绘计算机软件软件基础,第10章 排序,数据结构研究的内容,第 4 页,(1)什么是排序?将一组杂乱无章的数据按一定的规律顺次排列起来。,(2)排序的目的是什么?,存放在数据表中,按关键字排序,(3)排序算法的好坏如何衡量?时间效率 排序速度(比较次数+移动次数)空间效率 占内存辅助空间的大小稳定性 若两个记录A和B的关键字值相等,但排序后A、B的先后次序保持不变,则称这种排序算法是稳定的。,便于查找!,基本概念,第 5 页,(4)什么叫内部排序?什么叫外部排序?,若待排序记录都在内存中,称为内部排序;若待排序记录一部分在内存,一部分在外存,则称为外部排序。,注:外部排序时,要将数据分批调入内
2、存来排序,中间结果还要及时放入外存,显然外部排序要复杂得多。,(5)内部排序的算法有哪些?,按排序的规则不同,可分为3大类:插入排序线性插入排序、对半插入排序交换排序冒泡排序、快速排序选择排序简单选择排序、堆排序,待排序记录的数据类型,#define MAXSIZE 20/顺序表的最大长度Typedef int KeyType/关键字数据类型为整型Typedef struct RedTypeKeyType key;/关键字项InfoType otherinfo;/其它数据项/记录类型Typedef struct SqlistRedType RMAXSIZE+1;/r0用作哨兵int lengt
3、h;/表长/顺序表类型,第 6 页,第 7 页,1、插入排序,插入排序的基本思想是:,插入排序有多种具体实现算法:1)线性插入排序 2)对半插入排序,每步将一个待排序的对象,按其关键码大小,插入到前面已经排好序的一组对象的适当位置上,直到对象全部插入为止。,简言之,边插入边排序。,第 8 页,(1)线性插入排序,新元素插入到哪里?,例1:关键字序列T=(13,6,3,31,9,27,5,11),请写出直接插入排序的中间过程序列。,R0 r1 r2 r3 r4 r5 r6 r7 r8 6【13】6 3 31 9 27 5 11 3【6 13】3 31 9 27 5 11 31【3 6 13】31
4、 9 27 5 11 9【3 6 13 31】9 27 5 11 27【3 6 9 13 31】27 5 11 5【3 6 9 13 27 31】5 11 11【3 5 6 9 13 27 31】11【3 5 6 9 11 13 27 31】,在已形成的有序表中线性查找,并在适当位置插入,把原来位置上的元素向后顺移。,最简单的排序法!,第 9 页,void InsertSort(Sqlist/*插入到相应位置*/,线性插入排序算法的实现:,第 10 页,例1:关键字序列T=(21,25,49,25*,16,08),请写出直接插入排序的具体实现过程。,i=1,21,i=2,i=3,i=5,i=4
5、,i=6,25,49,25*,49,16,16,08,49,解:假设该序列已存入一维数组R7中,将R0作为哨兵(Temp)。则程序执行过程为:,初态:,16,25,21,16,完成!,时间效率:因为在最坏情况下,所有元素的比较次数总和为(01n-1)O(n2)。其他情况下也要考虑移动元素的次数。故时间复杂度为O(n2)空间效率:仅占用1个缓冲单元O(1)算法的稳定性:因为25*排序后仍然在25的后面稳定,第 11 页,(2)对半插入排序,优点:比较次数大大减少,全部元素比较次数仅为O(nlog2n)。时间效率:虽然比较次数大大减少,可惜移动次数并未减少,所以排序效率仍为O(n2)。空间效率:仍
6、为 O(1)稳定性:稳定,一个想得到的改进方法:,既然子表有序且为顺序存储结构,则插入时采用对分查找定可加速。,对半插入排序算法实现 void BInsertSort(Sqlist/*插入到相应位置*/,第 12 页,第 13 页,根据序列中两个结点关键字的比较结果,来对换在序列中的位置。算法是将关键字较大的结点向序列的尾部移动,关键字较小的结点向序列的前部移动,其不同点是它们各按特定的顺序来选择序列中比较的结点。,2 交换排序,交换排序的基本思想是:,交换排序有多种具体实现算法:(1)冒泡排序(2)快速排序,第 14 页,(1)冒泡排序,基本思路:每趟不断将记录两两比较,并按“前小后大”(或
7、“前大后小”)规则交换。优点:每趟结束时,不仅能挤出一个最大值到最后面位置,还能同时部分理顺其他元素;一旦下趟没有交换发生,还可以提前结束排序。前提:顺序存储结构,例:关键字序列 T=(21,25,49,25*,16,08),请写出冒泡排序的具体实现过程。,21,25,49,25*,16,0821,25,25*,16,08,4921,25,16,08,25*,4921,16,08,25,25*,4916,08,21,25,25*,4908,16,21,25,25*,49,初 态第1趟第2趟第3趟第4趟第5趟,第 15 页,冒泡排序算法,#define FALSE 0#define TRUE 1
8、void BubbleSort(Sqlist,第 16 页,冒泡排序的算法分析,最好情况:初始排列已经有序,只执行一趟起泡,做 n-1 次关键码比较,不移动对象。最坏情形:初始排列逆序,算法要执行n-1趟起泡,第i 趟(1 i n)做了n-i 次关键码比较,执行了n-i 次对象交换。此时的比较总次数KCN和记录移动次数RMN为:,因此:时间效率:O(n2)考虑最坏情况下空间效率:O(1)只在交换时用到一个缓冲单元稳 定 性:稳定25和25*在排序前后的次序未改变,第 17 页,(2)快速排序,基本思路:通过一趟排序将一个无序区分割成两个独立的无序子区,其中前一部分子区中所有元素关键字均不大于后
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 排序
![提示](https://www.31ppt.com/images/bang_tan.gif)
链接地址:https://www.31ppt.com/p-4540958.html