数据结构课程设计:快速排序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
学号
武汉理工大学华夏学院
课程设计
课程名称数据结构
题目:用C语言实现成绩表的快速排序程序设计
专业软件工程
班级
姓名
成绩
指导教师
2009 年6月28日至2009年7月3 日
课程设计任务书
设计题目:用C语言实现成绩表的快速排序程序设计
设计目的
1.巩固和加深课堂所学知识、学会分析研究数据对象的特性及数据的组织方法;
2.选择合适的数据的逻辑结构和存储结构以及相应操作,实现一个班的成绩统计
3. 提高程序设计能力、加强查阅、运用资料的能力、算法分析与程序设计素质培养;设计任务(在规定的时间内完成下列任务)
〔问题描述〕给出n个学生的1门课程的考试成绩信息,每条信息由姓名与分数组成,要求设计快速排序算法,进行:
(1)按成绩排序;
(2)输出形式为:张强张平曾芽王华孙军李应程滨
90888278706965
〔基本要求〕学生的考试成绩必须通过键盘输入,且需对输出进行格式控制;
〔算法提示〕利用快速排序算法求解;
具体要完成的任务是:
A.编制完成上述问题的C语言程序、进行程序调试并能得出正确的运行结果。
B.写出规范的课程设计报告书;
时间安排
6月 29日布置课程设计任务,查阅相关资料,确定设计课题;
6月 30日查阅资料、准备程序;
6月30~7月2日上机调试程序、教师验收程序、书写课程设计报告;
7月3 日下午4点前提交课程设计报告及相关文档。
具体要求
1. 课程设计报告按统一通用格式书写,具体内容如下:
①设计任务与要求
②总体方案与说明
③软件主要模块的流程图
④源程序清单与注释
⑤问题分析与解决方案(包括调式报告,即在调式过程中遇到的主要问题、解决方法及改进设想);
⑥小结与体会
附录:①源程序(必须有简单注释)②使用说明③参考资料2.每位学生应独立完成各自的任务且每天至少在设计室工作半天;
指导教师签名:09 年6月27日
教研室主任(或责任教师)签名:09 年6月28日
成绩表的快速排序程序设计
一、实验报告
实验目的
1.掌握用Turbo C 上机调试常规算法的程序;
2.掌握快速排序的基本方法和过程;
基本原理与方法:利用快速排序算法原理用C语言编程实现
实验设备:PC机一台、配置Turbo C软件
二、实验内容
[问题描述] 对于用户输入的数据序列,用快速排序法按从大到小或从小到大两种顺序进行排序,并显示每一趟的排序过程;
[基本要求] 采用递归算法和非递归算法两种算法;
[算法实现] 采用快速排序原理编写C程序;
[基本思想] 通过一趟排序将待排序记录分割成独立的两个区间,其中左区间记录的关键字的值均比右区间中记录的关键字的值小,再分别对这两个区间中的记
录进行快速排序,以达到整个序列有序为止。
[快速排序性质]
1)内部排序
快速排序是一种内部排序方法。也就是说快速排序的排序对象是读入内存
的数据。
2)比较排序
快速排序确定元素位置的方法基于元素之间关键字大小的比较。
所有基于比较方法的排序方法的时间下界不会低于O(nlgn)。这个结论的
具体证明,请参考有关算法的书籍,例如《算法导论》(第一版)第8章(第
二版在第七章QuickSort)。
3)在理想情况下,能严格地达到O(nlgn)的下界。一般情况下,快速排序
随机化快速排序的平均情况性能都达到了O(nlgn)。
4)不稳定性
快速排序是一种不稳定的排序方法。简单地说,元素a1, a2的关键字有
a1.key=a2.key,则不稳定的排序方法不能保证a1, a2在排序后维持原
来的位置先后关系。
5)原地排序
在排序的具体操作过程中,除去程序运行实现的空间消费(例如递归栈),
快速排序算法只需消耗确定数量的空间(即S(1),常数级空间)。
这个性质的意义,在于在内存空间受到限制的系统(例如MCU)中,快速
排序也能够很好地工作。
[排序过程] 在待排序的n各记录中任取一条记录(通常去第一条记录),把它作为基准元素,确定该条记录的最终位置,即该条记录左边的记录的所有记录的
关键字的值均小于该记录,右边的所有记录的关键字的值均大于等于该记
录。待排序序列以基准元素为界限被分割成两个区域,这个过程称作一次
快速排序。之后对所有的区间分别重复上述过程,直至每个区间只有一条
记录为止。快速排序是一个递归过程,整个排序过程中对不同的区间进行
快速排序。
假设要排序的数组是A[1]……A[N],首先任意选取一个数据(通常选用第一个数据)作为关键数据,然后将所有比它的数都放到它前面,所有比它
大的数都放到它后面,这个过程称为一躺快速排序。一躺快速排序的算法
是:
1)、设置两个变量I、J,排序开始的时候I:=1,J:=N;
2)以第一个数组元素作为关键数据,赋值给X,即X:=A[1];
3)、从J开始向前搜索,即由后开始向前搜索(J:=J-1),找到第一个小于X的值,两者交换;
4)、从I开始向后搜索,即由前开始向后搜索(I:=I+1),找到第一个大于X的值,两者交换;
5)、重复第3、4步,直到I=J;
[事例模范] 例:将数据45 53 18 36 72 30 48 93 15 36进行快速排序。
图1 快速排序的一次划分程
[45 53 18 36 72 30 48 93 15 36] 移动比较
i j
[36 53 18 36 72 30 48 93 15 45] 交换位置并比较
i j
[36 45 18 36 72 30 48 93 15 53] 交换位置并比较
i j
[36 15 18 36 72 30 48 93 45 53] 交换位置并比较
i j
[36 15 18 36 45 30 48 93 72 53] 交换位置并比较
i j
[36 15 18 36 30 45 48 93 72 53] 交换位置,i=j
i j
[36 15 18 36 30] 45 [48 93 72 53] 一趟排序的结果
图2一次完整的快速排序的排序过程(待排序区间以中括号括起来)
[45 53 18 36 72 30 48 93 15 36]
[30 36 18 36 15] 45 [48 93 72 53]
[18 15] 30 [36 36] 45 [48 93 72 53]
15 18 30 [36 36] 45 [48 93 72 53]
15 18 30 36 36 45 [48 93 72 53]
15 18 30 36 36 45 48 [93 72 53]
15 18 30 36 36 45 48 [53 72] 93
15 18 30 36 36 45 48 53 72 93