欢迎来到天天文库
浏览记录
ID:58178710
大小:239.00 KB
页数:21页
时间:2020-04-26
《数据结构课程设计报告各种排序算法性能比较.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、课程设计报告课程设计题目:各种排序算法性能比较学生:学号:专业:信息管理与信息系统班级:指导教师:2012年06月23日...目录CONTENTS一、课程设计目的……………………………………………………2二、课程设计题目概述………………………………………………2三、数据定义…………………………………………………………2四、各种排序的基本原理及时间复杂度分析………………………3五、程序流程图………………………………………………………6六、程序源代码………………………………………………………6七、程序
2、运行与测试…………………………………………………15八、实验体会…………………………………………………………九、参考文献…………………………………………………………...一、课程设计目的课程设计为学生提供了一个既动手又动脑,独立实践的机会,将课本上的理论知识和实际有机的结合起来,锻炼学生的分析解决实际问题的能力。提高学生适应实际,实践编程的能力。二、课程设计题目概述排序的方法很多,但是就其全面性能而言,很难提出一种被认为是最好的方法,每一种方法都有各自的优缺点,适合在不同的环境下使用。如果排序中依
3、据的不同原则对部排序方法进行分类,则大致可分为直接插入排序、直接选择排序、起泡排序、Shell排序、快速排序、堆排序等六类排序算法。本实验是对直接插入排序、直接选择排序、起泡排序、Shell排序、快速排序、堆排序这几种部排序算法进行比较,用不同的测试数据做测试比较。比较的指标为关键字的比较次数和关键字的移动次数。最后用图表数据汇总,以便对这些部排序算法进行性能分析。三、数据定义输入数据:由于大多数排序算法的时间开销主要是关键字之间的比较和记录的移动,算法的执行时间不仅依赖于问题的规模,还取决于输入
4、实例中数据的状态。所以对于输入数据,我们采用由用户输入记录的个数(以关键字的数目分别为20,100,500为例),测试数据由随机数产生器生成。输出数据:产生的随机数分别用直接插入排序;直接选择排序;起泡排序;Shell排序;快速排序;堆排序这些排序方法进行排序,输出关键字的比较次数和移动次数。...四、各种排序的基本原理及时间复杂度分析1、直接插入排序(InsertSort)1.1、基本原理:假设待排序的n个记录{R0,R1,…,Rn}顺序存放在数组中,直接插入法在插入记录Ri(i=1,2,…,n
5、-1)时,记录被划分为两个区间[R0,Ri-1]和[Ri+1,Rn-1],其中,前一个子区间已经排好序,后一个子区间是当前未排序的部分,将关键码Ki与Ki-1Ki-2,…,K0依次比较,找出应该插入的位置,将记录Ri插,然后将剩下的i-1个元素按关键词大小依次插入该有序序列,没插入一个元素后依然保持该序列有序,经过i-1趟排序后即成为有序序列。每次将一个待排序的记录,按其关键字大小插入到前面已经排好序的子文件中的适当位置,直到全部记录插入完成为止。1.2、时间复杂度分析:直接插入排序算法必须进行n
6、-1趟。最好情况下,即初始序列有序,执行n-1趟,但每一趟只比较一次,移动元素两次,总的比较次数是(n-1),移动元素次数是2(n-1)。因此最好情况下的时间复杂度就是O(n)。最坏情况(非递增)下,最多比较i次,因此需要的比较次数是:所以,时间复杂度为O(n2)。2、直接选择排序(SelectSort)2.1、基本原理:待排序的一组数据元素中,选出最小的一个数据元素与第一个位置的数据元素交换;然后在剩下的数据元素当中再找最小的与第二个位置的数据元素交换,循环到只剩下最后一个数据元素为止,依次类推
7、直到所有记录。第一趟第n个记录中找出关键码最小的记录与第n个记录交换;第二趟,从第二个记录开始的,2-1个记录中再选出关键码最小的记录与第二个记录交换;如此,第i趟,则从第i个记录开始的n-i+l个记录中选出关键码最小的记录与第i个记录交换,直到所有记录排好序。2.2、时间复杂度分析:...该算法运行时间与元素的初始排列无关。不论初始排列如何,该算法都必须执行n-1趟,每趟执行n-i-1次关键字的比较,这样总的比较次数为:所以,简单选择排序的最好、最坏和平均情况的时间复杂度都为O(n2)。3、冒泡
8、排序(BubbleSort)3.1、基本原理在每一趟冒泡排序中,依次比较相邻的两个关键字大小,若为反序咋交换。经过一趟起泡后,关键词大的必须移到最后。按照这种方式进行第一趟在序列(I[0]~I[n-1])中从前往后进行两个相邻元素的比较,若后者小,则交换,比较n-1次;第一趟排序结束,最大元素被交换到I[n-1]中,下一趟只需在子序列(I[0]~I[n-2])中进行;如果在某一趟排序中未交换元素,则不再进行下一趟排序。将被排序的记录数组J[1…n]垂直排列,每个记录J[i]看作是重
此文档下载收益归作者所有