数据结构-ch10-排序.ppt

  1. 1、本文档共72页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
堆排序的时间复杂性为O(nlog2n)。 该算法的附加存储用来执行对象交换时所用的一个临时对象。因此,该算法的空间复杂性为O(1)。 堆排序是一个不稳定的排序方法。 * 归并排序merge sort I=(n, A[0…n-1]) I1=([n/2], A[0…[n/2]-1]) I2=(n-[n/2], A[[n/2]-1…n-1]) I=(n,A(1),…A(n)) MERGE ...... ...... ...... ...... ...... ...... * 归并函数MERGE的实现 B[0] B[1] ... B[p-1] C[0] C[1] … C[q-1] 已排序序列B 已排序序列C 数组A 比较大小 小值 B[0] 比较大小 小值 C[0] …… 剩余已排序元素 归并MERGE的实现思想 * 归并排序算法 算法 Mergesort(A[0...n-1]) //递归调用Mergesort来对数组A排序 //输入:可排序数组A[0..n-1] //输出:非降序列数组A[0..n-1] if (n>1){ copy A[0.. [n/2]-1] to B[0..[n/2]-1] ; copy A[[n/2]..n-1] to C[0..[n/2]-1]; Mergesort(B[0..[n/2]-1]); Mergesort(C[0..[n/2]-1]); Merge(B,C,A); } 算法 Merge(B[0..p-1],C[0..q-1]),A[0..p+q-1]) //将两个有序数组合并成一个有序数组 //输入:两个有序数组B[0..p-1]和C[0..q-1] //输出:非降序列数组A-0..p+q-1] i?0; j?0; k?0; while (i<p and j<q do){ if (B[i] ≤ C[j]) { A[k]?B[i];i?i+1;} else{ A[k]?C[j];j?j+1;} k?k+1; } if (i=p) copy C[j..q-1] to A[k...p+q-1] else copy B[j..p-1] to A[k...p+q-1] * 算法分析 如果归并运算的时间与n成正比,则归并分类的计算时间可用递归关系式描述如下 算法 Mergesort(A[0...n-1]) if (n>1){ copy A[0.. [n/2]-1] to B[0..[n/2]-1] ; copy A[[n/2]..n-1] to C[0..[n/2]-1]; Mergesort(B[0..[n/2]-1]); Mergesort(C[0..[n/2]-1]); Merge(B,C,A); } * 归并排序的计算时间 T(n)= 0 n=1 2T(n/2)+Tmerge(n) n>1 当n=2k时,Tmerge(n)=n 可得: T(n)=2(2T(n/4)+n/2)+n =4T(n/4)+2n =4(2T(n/8)+n/4)+2n …… =2kT(1)+kn =kn 因为: n=2k , k=log2n 所以: T(n)= kn=nlog2n 如果2k<n<2k+1,有T(n)≤T(2k+1),有 T(n)=Θ (nlogn) Memory Time 冒泡 合并 * Example of merge sort Example of merge sort sorting a list of random numbers 小结 需要复习的知识点 排序的基本概念 排序的基本概念 关键码、初始关键码排列 关键码比较次数、数据移动次数 稳定性 附加存储 插入排序 用实例表明直接插入排序、 直接插入排序的算法 排序的性能分析 当待排序的关键码序列已经基本有序时,用直接插入排序最快 选择排序 用实例表明直接选择排序、堆排序的过程 直接选择排序和堆排序的算法 三种选择排序的性能分析 用直接选择排序在一个待排序区间中选出最小的数据时,与区间第一个数据对调,不是顺次后移。这导致方法不稳定。 在堆排序中将待排序的数据组织成完全二叉树的顺序存储。 交换排序 用实例表明起泡排序和快速排序的过程 起泡排序的算法 * * :8080/JudgeOnline/showproblem?problem_id=1127 * * * * * * 问题I=(n,A[0...n-1])表示有n个输入,分别在数组A中。 合并排序问题的划分后的最小子问题中只有一个元素,该问题不需要

文档评论(0)

精品文库 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档