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