数据结构课程设计:快速排序

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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

相关文档
最新文档