- 1、本文档共14页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
排序算法复杂性分析一秦健刘鹏刘明欢我们郑重承诺,本作业的内容均为原创,没有任何抄袭他人成果的行为,也不存在他人代写作业和程序的行为。引用他人成果或公开资料的部分都已经按照正确的格式在参考文献中标出。作者签字得分统计学生填写老师填写姓名学号工作所占比例得分分别得分秦明要本文通过三种简单排序-插入、冒泡和选择排序算法并运用C++语言编程实现,以计算简单排序算法复杂度。首先,利用不同规模下随机产生的不同序列,计算三种排序方法下的元运算-比较、交换、移动的次数来定量刻画排序算法的时间复杂度,即序列规模与元运算次数的关系,得到三种算法的时间复杂度均为,这说明这三种排序算法具有相同时间复杂度,并且实现简单,所以也归为一类简单排序算法。其次,采用统一规模下的不同排列顺序,主要是两个极端序-顺序、逆序的情况下分析三种算法的时间复杂度,得到算法的最好时间复杂度为,最坏时间复杂度为,反映出不同顺序的序列导致的排序算法时间复杂度的巨大差异性,并且插入、冒泡排序与选择排序之间的优劣也逐渐显现出来,主要是由于逆序对的数目导致交换次数变化的缘故。最后,本文将作为其他排序算法的时间复杂度作为后续扩展部分,以待完善。本文将围绕以下两个问题进行讨论分析:设计一个程序,程序的输入为n个(n必须要从键盘输入)0到10000的正整数(正整数可以是随机产生),输出为对这n个数进行从小到大排序后的序列。排序方法分别使用插入排序、冒泡排序和选择排序。以两个数比较、两个数交换、移动一个数为基本计算单位,测试你所编写的程序对于n=100,500,1000,2000四种输入规模的时间复杂度。一、算法复杂度1.1算法复杂性算法的复杂性是算法效率的度量,是评价算法优劣的重要依据。一个算法的复杂性的高低体现在运行该算法所需要的计算机资源的多少上面,所需的资源越多,我们就说该算法的复杂性越高;反之,所需的资源越低,则该算法的复杂性越低。??计算机的资源,最重要的是时间和空间(即存储器)资源。因而,算法的复杂性有时间复杂性和空间复杂性之分。1.2时间复杂度【1】如果分别用,和表示算法要解的问题的规模、算法的输入和算法本身,而且用表示复杂性,把时间复杂性和空间复杂性分别用和来表示那么有-------(1)设计算机所提供的元运算有种,分别记为,,…,。又设每执行一次这些元运算所需要的时间分别为,,…,。经统计用到的元运算的次数为,则有。因此,。记最坏情况、最好情况和平均情况下的时间复杂性,并分别有其中,是规模为的合法输入的集合;,分别是中使达到的合法输入与使达到的合法输入;而是在算法的应用中出现输入的概率。二、简单排序算法2.1简单排序法思想【2】2.1.1插入排序有一个已经有序的数据序列,要求在这个已经排好的数据序列中插入一个数,但要求插入后此数据序列仍然有序,这个时候就要用到一种新的排序方法——插入排序法,插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据,算法适用于少量数据的排序,插入算法把要排序的数组分成两部分:第一部分包含了这个数组的所有元素,但将最后一个元素除外(让数组多一个空间才有插入的位置),而第二部分就只包含这一个元素(即待插入元素)。在第一部分排序完成后,再将这个最后元素插入到已排好序的第一部分中。2.1.2冒泡排序重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。冒泡排序是这样实现的:首先从列表的第一个数字到倒数第二个数字,逐个检查:若某一位上的数字大于他的下一位,则将它与它的下一位交换。然后重复1号步骤,直至再也不能交换。2.1.3选择排序选择排序工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。n个记录的文件的直接选择排序可经过n-1趟直接选择排序得到有序结果:初始状态:无序区为,有序区为空。第1趟排序在无序区中选出关键字最小的记录,将它与无序区的第1个记录交换,使和分别变为记录个数增加1个的新有序区和记录个数减少1个的新无序区。2.2简单排序法流程图此处仅给出选择排序算法流程图,冒泡、插入排序算法流程图可根据2.1算法步骤类似给出。2.3简单排序法伪代码同理,此处仅给出插入排序算法伪代码,冒泡、选择排序算法伪代码可根据附录③中的程序类似给出。INSERTION-SORT(A)Begin1forj=0 tolength[A]-12 if A[j]A[j+1] then key=A[j]3 //InsertA[j+1] into the sorted sequenceA[0..j].4 i=j
文档评论(0)