- 1、本文档共14页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构课程设计 快速排序
数据结构课程设报告快速排序详析的设计专业网络工程学生姓名桂轩班级网络141学号1410075148指导教师徐燕萍完成日期2016年1月16日目录1、设计内容11.1概述11.2 快速排序算法介绍11.3 设计题目11.4开发环境22、设计分析22.1 快速排序的分析设计22.2系统详细设计33、设计实践43.1具体程序43.2快速排序算法?74、测试方法95、程序运行效果96、设计心得111、设计内容1.1概述快速排序是对冒泡排序的一种本质改进。它的基本思想是通过一趟扫描后,使得排序序列的长度能大幅度地减少。在冒泡排序中,一次扫描只能确保最大数值的数移到正确位置,而待排序序列的长度可能只减少1。快速排序通过一趟扫描,就能确保某个数(以它为基准点吧)的左边各数都比它小,右边各数都比它大。然后又用同样的方法处理它左右两边的数,直到基准点的左右只有一个元素为止。它是由C.A.R.Hoare于1962年提出的。快速排序是不稳定的。最理想情况算法时间复杂度O(nlog2n),最坏O(n^2)。1.2 快速排序算法介绍快速排序就像它的名称所暗示的,是一种快速的分而治之的算法,平均时间复杂度为O(nlog2n)。它的速度主要归功于一个非常紧凑并且高度化的内部循环。其基本算法Quicksort(S)由以下四个步骤组成:(1)如果S中的元素的数目为0或1,则返回。(2)选择S中的任意一个元素v,v叫做支点(Pivot)。(3)将S-{v}(剩下的元素在S中)分成两个分开的部分。L={x属于S-{v}|x=v}和R={x属于S-{v}|x=v}。(4)依次返回Quicksort(L)、v和Quicksort(R)的结果。1.3 设计题目设计并实现一种快速排序(Quicksort)的优化版本,并且比较在下列组合情况下算法的性能表现。(1)cutoff值从0~20。cutoff值的作用是只有当数组的长度小于等于这个值时,才使用另一种简单排序方法对其排序,否则使用Quicksort算法排序。(2)选定支点的方法分别是“第一个元素”,“三个元素的中值”,“五个元素的中值”。对上述的测试分别要采用顺序、逆序、随机三种类型的输入文件。输入文件中测试数组的大小可以从1000个数到10000个数不等。程序从input.txt文件中读取输入,输出到output.txt 文件。例如:input.txt内容如下。5 /*数字的个数*/5 4 3 2 1 /*数字用空格分开*/ /*两组测试中间空一行*/104 6 8 7 5 1 3 9 2 0相应的output.txt内容如下。Case number :1Number of elements:51 2 3 4 5Case number :2Number of elements:100 1 2 3 4 5 6 7 8 9程序的重点在于对每种组合情况下算法性能的比较。不同的运行时间要用图表表示出来,在图表中要区分由文件大小的不同而产生的差别。1.4开发环境C++是在C语言的基础上开发的一种通用编程语言,应用广泛,C++支持多种编程范式——面向对象编程、泛型编程和过程化编程。其编程领域众广,常用于系统开发,引擎开发等应用领域,是至今为止最广大受用的最强大编程语言之一,支持类、封闭、重载等。C++对C的“增强”,表现在六个方面:(1)类型检查更为严格。(2)增加了面向对象的机制。(3)增加了泛型编程的机制(Template)。(4)增加了异常处理。(5)增加了运算符重载。(6)增加了标准模板库(STL)。2、设计分析2.1 快速排序的分析设计(1)最好情况:快速排序的最好情况是支点把集合分成两个同等大小的子集,并且在递归的每个阶段都这样划分。然后就有了两个一半大小的递归调用和线性的分组开销。在这种情况下运行的时间复杂度是O(nlog2n)。(2)最坏情况:假设在每一步的递归调用中,支点都恰好是最小的元素。这样小元素的集合L就是空的,而大元素集合R拥有了除支点以外的所有元素。设T是对N个元素进行快速排序所需的运行时间,并假设对0或1个元素排序的时间刚好是1个时间单位。那么对于N1,当每次都运气很差地选择最小的元素作为支点,得到的运行时间满足T(N)=T(N-1)+N。即对N个项进行排序的时间等于递归排序大元素子集中的N-1个项所需要的时间加上进行分组的N个单位的开销。最终得出:T(N)=T(1)+2+3+…+N=N(N+1)=O(N2) 2 (3)支点的选择错误方式:比较常见的不明智的选择就是把第一个元素作为支点。但如果输入是已经预先排过序的,或者是倒序的,该支点给出的分组就很
您可能关注的文档
最近下载
- 八年级英语上册 Unit 2 Keeping Healthy Topic 2 I must ask him to give up smoking Section A教案 (新版)仁爱版.docx
- 物业公司积分制管理办法.doc VIP
- 红领巾心向党活动主持词二篇.doc VIP
- 外研版高中英语(全套)全词汇表PDF打印版.pdf
- 能源管理体系管理评审计划报告.doc VIP
- IEC60870-5-101104规约及华东101细则介绍.ppt
- 《小英雄雨来》分享课教学设计.docx
- 公司部门财务月工资表明细统计个税自动计算工资条excel表格模板 (5).xlsx VIP
- 浅探小米公司的内部控制.docx VIP
- 高中语文如何让议论文有“形”有“序”——议论文结构讲解学案.docx
文档评论(0)