- 1、本文档共24页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
郑州轻工业学院本科数据结构课程设计总结报告设计题目:常用的内部排序算法的分析和比较学生姓名:傅伟伟系 别:计算机科学与工程专 业:计算机科学与技术班 级:10-02班学 号:541007010207指导教师:卢 冰 、李 晔2012 年 6 月 21 日郑州轻工业学院课 程 设 计 任 务 书题目 常用内部排序算法分析与比较 专业、班级计算机科学与技术10-02班 学号 541007010207姓名 傅伟伟 主要内容:分析直接插入排序、希尔排序、冒泡排序、快速排序、简单选择排序、堆排序、归并排序、基数排序等常用的内部排序算法的思想,通过交换次数以及比较次数来对这些算法进行比较。基本要求:通过给定的记录数目及排序思想,设计相应的存储结构,程序之中要求可以实现完全随机,部分逆序等测试数据,来对每一种排序算法进行验证。其次还要设计出一个统计交换次数和比较次数的函数来进行计数。从待排序的记录数目、记录大小、关键字结构及其对稳定性的要求讨论出每种算法使用的环境。主要参考资料:严蔚敏 吴伟民 数据结构(C语言版) 清华大学出版社完 成 期 限: 2012/6/21 指导教师签名: 课程负责人签名: 2012年 6月 21 日一、设计题目:常用的内部排序的算法分析和比较二、运行环境:操作系统:Windows软件:Visual C++ 6.0 三、设计目的:针对常见的计算机内部排序算法,如直接插入排序、希尔排序、冒泡排序、简单选择排序、堆排序、归并排序、基数排序等,通过是自己设计的程序,借助排序中交换次数和比较次数来比较这些算法的适用范围。四、程序设计的流程图:五、算法分析:1、简单选择排序:简单选择排序的每一趟都是从待排的数据元素中选出一个最小(最大)的一个元素,顺序的放在已经排好的数列的最后,直到全部待排序的数据元素排序完毕。2、直接插入排序:这是一种最简单的排序方法,它的基本操作时将一个记录插入到一个已经排好序的有序表中,从而得到一个新的记录数增1的有序表。其效率:从空间的角度来看待,它只需要一个辅助的空间,从时间上来看的话,排序的基本操作是比较两个关键字的大小和移动(本程序中将移动和交换看成一样)记录。在整个排序的过程中,当待排序列中的关键字非递减有序的话,那么比较次数最小n-1,且不需要移动,当待排序列逆序时,比较次数达到最大(n+2)(n-1)/2,记录的移动的次数也达到最大值(n+4)(n-1)/2。取平均值得时候直接插入排序的时间复杂度O(n2)。排序是稳定的。3、冒泡排序:这种排序的比较基本思想就是两两比较待排序的数据元素的大小,发现两个数据元素的次序相反时候,就进行交换,知道没有反序的数据为止。冒泡排序是一次的比较找出最小(最大)值,然后将其放置序列的最后一个位置,再将剩下的从第一个位置开始至n-i的位置进行重复的操作。4、希尔排序:属于一种插入排序类的方法,先将整个待排序记录分成若干个子序列分别进行直接插入排序,待整个序列中的记录“基本有序”时,再对整体记录进行一次直接插入排序。实质上就是一个将序列分块化,然后再对各个块进行排序,化整为零的操作,最后待序列差不多有序的时候进行一次化零为整操作,实现最后一次的插入排序。5、快速选择排序:这个是对冒泡排序的一种改进。它的基本思想就是,在当前无序区R[1..H]中任取一个数据元素作为比较的基准(不妨记为X),用此基准将当前无序区划分为左右两个较小的无序区:R[1..I-1]和R[I+1..H],且左边的无序子区中数据元素均小于等于基准元素,右边的无序子区中数据元素均大于等于基准元素,而基准X则位于最终排序的位置上,即R[1..I-1]≤X.Key≤R[I+1..H](1≤I≤H),当R[1..I-1]和R[I+1..H]均非空时,分别对它们进行上述的划分过程,直至所有无序子区中的数据元素均已排序为止。6、堆排序:堆排序实质上就是具备有如下性质的完全二叉树:树中任一非叶子结点的关键字均大于等于其孩子结点的关键字。它只需要记录一个大小的辅助空间,每个待排序的纪录仅占有一个存储空间。一般对记录数较少的文件并不值得提倡,但是对n较大的文件还是很有效的,因为其运行时间主要是小号在建初始堆和调整建新堆时进行的反复的筛选上的。7、归并排序:归并排序实质上就是将两个或者两个以上的有序表组合成一个新的有序表。8、基数排序:基数排序是一种借助多关键字排序思想对单逻辑关键字进行的排序方法。中间是涉及到一个重复的分配再收集的操作。具体在本程序中:根据数项个位上的值,将所有的数据项分为10组;然后对这10组数据重新排列,把所有的以0结尾的排在最前,当然需要保证稳定性,然后依次类推以2、3……9开头,接着进行第二趟的排序,由于本程序中用到的数字是1000以内的实例,那么需要有第三趟的操作
文档评论(0)