数据结构课程设计报告
快速排序详析
专业 | 计算机科学与技术 |
学生姓名 | 新疆美食有哪些 |
班级 | |
克绍箕裘学号 | |
指导教师 | |
完成日期 | 2014年1月17日 |
豆芽制作 | |
目 录
1 概 述 1
1.1 课程设计目的 1
1.2 课程设计内容 1
2 系统需求分析 1
2.1 系统目标 1
2.2 主体功能 1
2.3 开发环境 1
3 系统概要设计 2
3.1 系统的功能模块划分 2
3.2 系统流程图 2
4系统详细设计 3
5 测试 6
5.1 测试方案 6
5.2 测试结果 6
6 小结 8
参考文献 10
河北教育考试院
附录1 源程序清单 11
快速排序详析
1 概 述
1.1 课程设计目的
1.要求学生达到熟练掌握C语言的基本知识和技能。
2.了解并掌握数据结构的设计方法,具备初步的独立分析和设计能力。
3.提高程序设计和调试能力。学生通过上机实习,验证自己设计的算法的正确性。学会有效利用基本调试方法,迅速找出程序代码中的错误并且修改。
4.培养算法分析能力。分析所设计算法的时间复杂度和空间复杂度,进一步提高程序设计水平。
5.初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能。
1.2 课程设计内容
设计并实现一种快速排序(Quicksortde优化版本,并且比较在下列组合情况下算法的性能表现:
(1)cutoff值从0~20。cutoff值的作用是只有当数组长度小于等于这个值时才使用另一种简单排序方法对其排序,否则使用快速排序算法排序。
(2)选定支点的方法分别是“第一个元素”,“第三个元素中值”,“五个元素的中值”。
对上述的测试分别要求采用顺序,逆序,随机三种类型输入文件。
输入文件中测试数组大小可以从1000个数到10000个数不等。程序从文件读入,输出到文件。例如:
内容如下。
5 / * 数字的个数 * /
施于人
5 4 3 2 1 / * 数字用空格分开 * /
/ * 两组测试数据中间空一行 * /
10
4 6 8 7 5 1 3 9 2 0
相应的output抚慰的近义词内容如下。
Ca number: 1
Number of elements: 5
Ca number: 2
Number of elements: 10
0 1 2 3 4 5 6 7 8 9
程序的重点在于对每种组合情况下算法性能的比较。不同的运行时间要用图表标示出来,在图表中要区分由于文件大小不同而产生的差别。
2 系统需求分析
2.1 系统目标
分析支点(median的值)和数组小于多少时使用简单排序算法(cutoff的值)值选择和待排序数据的情况(顺序,逆序,随机)对快速排序算法效率的影响。本实验的目的是设计并实现一种快速排序(Quicksort)的优化版本,并且比较在下列组合情况下算法的性能表现。
2.2 主体功能
将一组记录(元素)的任意序列按照某个域的值的递增(从小到大)或递减(由大到小)的次序重新排列。
基本的快速排序算法可以应用递归实现,关键的细节包括支点的选择和如何分组。
该算法允许把任何元素作为支点。支点把数组分为两组:小于支点的元素和大于支点的元素集。快速排序的最好情况是支点把集合分成两个同等大小的子集,并且在递归的每个阶段都这样划分。然后就有了两个一般大小的递归调用和线性的分组开销。
不同的排序算法有不同的时间和空间复杂性以及不同的排序稳定性。所谓排序算法的稳定性是指该算法不改变等值记录之间的先后顺序。不同的算法在时间、空间复杂性以及算法稳定性方面的性能。
就平均时间性能而言,快速排序、堆排序和归并排序都有最好的时间性能。相对而言,快速排序速度最快。但快速排序在最坏的情况下的时间性能达到了O(n²),不如堆排序和归并排序快。
就空间性能来看,直接插入排序、冒泡排序、简单选择排序、堆排序要求的辅助空间比较小。其中直接插入排序、冒泡排序、简单选择排序比较简单,容易实现,但时间性能较差。
2.3 开发环境
侧滑步Microsoft Visual C++ 6.0
3 系统概要设计
3.1 系统的功能模块划分
程序主要由6部分组成,分别是:
(1)程序入口main函数, 从文件中读取数据,放入Array数组中,在执行QuickSort函数之前用clock函数获取系统时95F44 stop变量中。使用stop-start获得QuickSort函数的执行时间。将运行时间和排序后的数组一起输入到文件中。关闭孕妇如何控制血糖文件,关闭文件。