八排序good

上传人:玫*** 文档编号:252566629 上传时间:2024-11-17 格式:PPT 页数:42 大小:1,008.50KB
返回 下载 相关 举报
八排序good_第1页
第1页 / 共42页
八排序good_第2页
第2页 / 共42页
八排序good_第3页
第3页 / 共42页
点击查看更多>>
资源描述
,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第八章 排序,排序定义将一个数据元素或记录的任意序列,重新排列成一个按关键字有序的序列叫,排序分类,按待排序记录所在位置,内部排序:待排序记录存放在内存,外部排序:排序过程中需对外存进展访问的排序,按排序依据原则,插入排序:直接插入排序、折半插入排序、希尔排序,交换排序:冒泡排序、快速排序,选择排序:简洁选择排序、堆排序,归并排序:2-路归并排序,基数排序,按排序所需工作量,简洁的排序方法:T(n)=O(n),先进的排序方法:T(n)=O(logn),基数排序:T(n)=O(d.n),排序根本操作,比较两个关键字大小,将记录从一个位置移动到另一个位置,8.1 插入排序,直接插入排序,排序过程:整个排序过程为n-1趟插入,即先将序列中第1个记录看成是一个有序子序列,然后从第2个记录开头,逐个进展插入,直至整个序列有序,算法描述,例,49 38 65 97 76 13 27,i=2,38,(38 49)65 97 76 13 27,i=3,65,(38 49 65)97 76 13 27,i=4,97,(38 49 65 97)76 13 27,i=5,76,(38 49 65 76 97)13 27,i=6,13,(13 38 49 65 76 97)27,i=1 (),i=7 (13 38 49 65 76 97)27,27,j,j,j,j,j,j,97,76,65,49,38,27,(13 27 38 49 65 76 97),排序结果:,算法评价,时间简单度,假设待排序记录按关键字从小到大排列(正序),关键字比较次数:,记录移动次数:,假设待排序记录按关键字从大到小排列(逆序),关键字比较次数:,记录移动次数:,假设待排序记录是随机的,取平均值,关键字比较次数:,记录移动次数:,T(n)=O(n),空间简单度:S(n)=O(1),Ch8_1.c,折半插入排序,排序过程:用折半查找方法确定插入位置的排序叫,例,i=1 (30)13 70 85 39 42 6 20,i=2,13,(13 30)70 85 39 42 6 20,i=7,6,(6 13 30 39 42 70 85)20,.,i=8,20,(6 13 30 39 42 70 85)20,s,j,m,i=8,20,(6 13 30 39 42 70 85)20,s,j,m,i=8,20,(6 13 30 39 42 70 85)20,s,j,m,i=8,20,(6 13 30 39 42 70 85)20,s,j,i=8,20,(6 13 20 30 39 42 70 85),算法描述,算法评价,时间简单度:T(n)=O(n),空间简单度:S(n)=O(1),Ch8_2.c,希尔排序(缩小增量法),排序过程:先取一个正整数d1n,把全部相隔d1的记录放一组,组内进展直接插入排序;然后取d2r2.key,则交换;然后比较其次个记录与第三个记录;依次类推,直至第n-1个记录和第n个记录比较为止第一趟冒泡排序,结果关键字最大的记录被安置在最终一个记录上,对前n-1个记录进展其次趟冒泡排序,结果使关键字次大的记录被安置在第n-1个记录位置,重复上述过程,直到“在一趟排序过程中没有进展过交换记录的操作”为止,例,49 38 65 97 76 13 27 30,初始关键字,38 49 65 76 13 27 30,97,第一趟,38 49 65 13 27 30,76,第二趟,38 49 13 27 30,65,第三趟,38 13 27 30,49,第四趟,13 27 30,38,第五趟,13 27,30,第六趟,38,49,76,97,13,97,27,97,30,97,13,76,76,76,27,30,13,65,27,65,30,65,13,13,49,49,30,49,27,38,27,38,30,38,算法描述,算法评价,时间简单度,最好状况正序,比较次数:n-1,移动次数:0,最坏状况逆序,比较次数:,移动次数:,空间简单度:S(n)=O(1),T(n)=O(n),Ch8_4.c,快速排序,根本思想:通过一趟排序,将待排序记录分割成独立的两局部,其中一局部记录的关键字均比另一局部记录的关键字小,则可分别对这两局部记录进展排序,以到达整个序列有序,排序过程:对rst中记录进展一趟快速排序,附设两个指针i和j,设枢轴记录rp=rs,x=rp.key,初始时令i=s,j=t,首先从j所指位置向前搜寻第一个关键字小于x的记录,并和rp交换,再从i所指位置起向后搜寻,找到第一个关键字大于x的记录,和rp交换,重复上述两步,直至i=j为止,再分别对两个子序列进展快速排序,直到每个子序列只含有一个记录为止,例,初始关键字:,49,38 65 97 76 13 27 50,i,j,x,j,i,完成一趟排序:,(27 38 13),49,(76 97 65 50),分别进展快速排序:(13)27 (38)49 (50 65)76 (97),快速排序完毕:13 27 38 49 50 65 76 97,49,27,i,j,i,j,i,j,49,65,j,i,13,49,i,j,49,97,i,j,算法描述,算法评价,时间简单度,最好状况每次总是选到中间值作枢轴T(n)=O(nlog2n),最坏状况每次总是选到最小或最大元素作枢轴T(n)=O(n),空间简单度:需栈空间以实现递归,最坏状况:S(n)=O(n),一般状况:S(n)=O(log2n),T(n)=O(n),Ch8_5.c,8.3 选择排序,简洁选择排序,排序过程,首先通过n-1次关键字比较,从n个记录中找出关键字最小的记录,将它与第一个记录交换,再通过n-2次比较,从剩余的n-1个记录中找出关键字次小的记录,将它与其次个记录交换,重复上述操作,共进展n-1趟排序后,排序完毕,例,初始:,49 38 65 97 76 13 27,k,j,j,j,j,j,j,k,k,i=1,13,49,一趟:,13,38 65 97 76 49 27,i=2,k,k,j,j,j,j,j,27,38,二趟:,13,27,65 97 76 49 38,三趟:,13,27,38,97 76 49 65,四趟:,13,27,38,49,76 97 65,五趟:,13,27,38,49,65,97 76,六趟:,13,27,38,49,65,76,97,排序完毕:13 27 38 49 65 76 97,算法描述,算法评价,时间简单度,记录移动次数,最好状况:0,最坏状况:3(n-1),比较次数:,空间简单度:S(n)=O(1),T(n)=O(n),Ch8_6.c,堆排序,堆的定义:n个元素的序列(k1,k2,kn),当且仅当满足以下关系时,称之为堆,或,(,i=1,2,.,n/2),k,i,k,2i,k,i,k,2i,+1,k,i,k,2i,k,i,k,2i,+1,例 96,83,27,38,11,9,例 13,38,27,50,76,65,49,97,96,27,9,11,38,83,13,27,38,49,65,76,50,97,可将堆序列看成完全二叉树,则堆顶,元素完全二叉树的根必为序列中,n个元素的最小值或最大值,堆排序:将无序序列建成一个堆,得到关键字最小或最大的记录;输出堆顶的最小大值后,使剩余的n-1个元素重又建成一个堆,则可得到n个元素的次小值;重复执行,得到一个有序序列,这个过程叫,堆排序需解决的两个问题:,如何由一个无序序列建成一个堆?,如何在输出堆顶元素之后,调整剩余元素,使之成为一个新的堆?,其次个问题解决方法筛选,方法:输出堆顶元素之后,以堆中最终一个元素替代之;然后将根结点值与左、右子树的根结点值进展比较,并与其中小者进展交换;重复上述操作,直至叶子结点,将得到新的堆,称这个从堆顶至叶子的调整过程为“筛选”,例,13,27,38,49,65,76,50,97,97,27,38,49,65,76,50,13,输出:,13,27,49,38,97,65,76,50,13,输出:,13,97,49,38,27,65,76,50,13,输出:,13 27,38,49,50,27,65,76,97,13,输出:,13 27,65,49,50,27,38,76,97,13,输出:,13 27 38,49,65,50,27,38,76,97,13,输出:,13 27 38,76,65,50,27,38,49,97,13,输出:,13 27 38 49,50,65,76,27,38,49,97,13,输出:,13 27 38 49,97,65,76,27,38,49,50,13,输出:,13 27 38 49 50,65,97,76,27,38,49,50,13,输出:,13 27 38 49 50,97,65,76,27,38,49,50,13,输出:,13 27 38 49 50 65,76,65,97,27,38,49,50,13,输出:,13 27 38 49 50 65,97,65,76,27,38,49,50,13,输出:,13 27 38 49 50 65 76,97,65,76,27,38,49,50,13,输出:,13 27 38 49 50 65 76 97,算法描述,第一个问题解决方法,方法:从无序序列的第n/2个元素即此无序序列对应的完全二叉树的最终一个非终端结点起,至第一个元素止,进展反复筛选,例 含8个元素的无序序列49,38,65,97,76,13,27,50,49,65,38,27,13,76,97,50,49,65,38,27,13,76,50,97,49,13,38,27,65,76,50,97,49,13,38,27,65,76,50,97,13,27,38,49,65,76,50,97,算法描述,算法评价,时间简单度:最坏状况下T(n)=O(nlogn),空间简单度:S(n)=O(1),Ch8_7.c,8.4,归并排序,归并,将两个或两个以上的有序表组合成一个新的有序表,叫,2-,路归并排序,排序过程,设初始序列含有,n,个记录,则可看成,n,个有序的子序列,每个子序列长度为1,两两合并,得到,n/2,个长度为2或1的有序子序列,再两两合并,如此重复,直至得到一个长度为,n,的有序序列为止,例,初始关键字:,49 38 65 97 76 13 27,一趟归并后:,38 49 65 97 13 76 27,二趟归并后:,38 49 65 97 13 27 76,三趟归并后:,13 27 38 49 65 76 97,算法描述,算法评价,时间简单度:T(n)=O(nlog2n),空间简单度:S(n)=O(n),Ch8_9.c,8.5,基数排序,多关键字排序,定义:,例 对52张扑克牌按以下次序排序:,23A23A,23A23A,两个关键字:花色 ,面值23A,并且“花色”地位高于“面值”,多关键字排序方法,最高位优先法MSD):先对最高位关键字k1如花色排序,将序列分成假设干子序列,每个子序列有一样的k1值;然后让每个子序列对次关键字k2如面值排序,又分成假设干更小的子序列;依次重复,直至就每个子序列对最低位关键字kd排序;最终将全部子序列依次连接在一起成为一个有序序列,最低位优先法(LSD):从最低位关键字kd起进展排序,然后再对高一位的关键字排序,依次重复,直至对最高位关键字k1排序后,便成为一个有序序列,MSD与LSD不同特点,按MSD排序,必需将序列逐层分割成假设干子序列,然后对各子序列分别排序,按LSD排序,不必分成子序列,对每个关键字都是整个序列参与排序;并且可不通过关键字比较,而通过假设干次安排与收集实现排序,链式基数排序,基数排序:借助“安排”和“收集”对单规律关键字进展排序的一种方法,链式基数排序
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 成人自考


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!