软件开发课程设计

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

合肥工业大学

课程设计

设计题目排序算法的实现系统学生姓名高圣泽

学号 20085869

专业班级数学与应用数学08-1 指导教师王琦王青山

2011 年 06 月 07 日

一、设计目的

通过对此次数据结构大型作业内容的分析,锻炼学生分析与编写大型软件代码的能力。通过与同组同学的合作,锻炼协作的能力。以及本系统实现了各种排序(直接插入排序、折半插入排序、希尔排序、冒泡排序、快速排序、直接选择排序、堆排序、归并排序、基数排序)。

二、课程设计的内容

1.课程设计的题目及简介

题目:排序系统

简介:本系统实现了9种排序方法(直接插入排序、折半插入排序、希尔排序、冒泡排序、快速排序、直接选择排序、堆排序、归并排序、基数排序)。

2.设计说明及需求分析

本系统有以下十个功能模块,分别有switch 下的几个case 后语句函数来实现。

菜单界面设计图:

模块设计图:

3.概要设计

(1)直接插入排序:

Straight Insertion Sort(IS)是一种简单的基本排序方法,它的基本操作是将一个记录插到已排序好的有序表中,从而得到一个新的、记录数增1的有序表。

(2)折半插入排序:

Binary Inserting Sort(BI)是在直接插入的基础之上针对记录数量很大时引入的排序方法,首先用折半查找法在有序表中找到正确的插入位置,然后移动记录,空出插入位置,再进行插入。

(3)希尔排序:

Shell’s Sort(SS)先将整个待排序记录序列分割成

若干子序列分别进行直接插入排序,待整个序列中的记录“基本有序时”,再对全体记录进行一次直接插入排序。子序列不是简单的逐段分割,而是将相隔某个“增量”的记录组成一个子序列,所以关键字的较小的记录不是一步一步的前移,而是跳跃式前移,从而使得在进行最后一趟增量为1的插入排序时,序列已基本有序,只是做少量比较和移动即可完成排序。

(4)冒泡排序:

Bubble Sort(BS)每相邻两个记录关键字比大小时,大的记录往下沉。每一遍把最后一个下沉的位置记下,下一遍只需检查比较到此为止,到所有记录都不发生下沉时,整个过程结束(没交换一次,记录减少一个反叙数)。

(5)快速排序:

Quick Sort(QS)是对冒泡排序的一种改进,通过一趟快速排序将待排序的记录组分割成独立的两部分,其中前一部分记录的关键字均比枢轴记录的关键字小;后一部分记录的关键字均比枢轴记录的关键字大,数轴记录得到了它在整个序列中最终位置并被存放好,为一趟快速排序。第二趟再分别对分割成两部分的子序列,再进行快速排序,这两部分子序列中的枢轴记录也得到了最终在序列中的位置而被存放好,并且它们又分别分割出独立的两个子序列……递归,不断进行下去,直到每个待排序的子序列中只有一个记

录时为止,整个排序结束。

(6)直接选择排序:

Straight choose(SC)每次从无序表中取出第一个元素,把它插入到有序表的合适位置,使有序表仍然有序。第一趟比较前两个数,然后把第二个数按大小插入到有序表中; 第二趟把第三个数据与前两个数从后向前扫描,把第三个数按大小插入到有序表中;依次进行下去,进行了(n-1)趟扫描以后就完成了整个排序过程。

(7)堆排序:

Heap Sort (HS)利用堆数(1.完全二叉树;2.每一个结点的值均大于或等于它的两个子结点的值;3.树根的值是堆数中最大的)来进行排序,利用数组来存储待排序的数据,转换成一棵完全二叉树,将完全二叉树转化为堆数,然后排序。

(8)归并排序:

Mergesort(MS)将两个或两个以上的有序子表合并成一个新的有序表。将n个记录的待排序列看成是有n个长度都为1的有序子表组成,将两两相邻的子表归并为一个有序子表,重复上述步骤,直至归并为一个长度为n的有序表。(9)基数排序:

Basesort基数排序是一种借助关键字排序的思想对

但逻辑关键字进行排序的方法。

三、课程总结

(一)课程设计过程的收获:

(1)大体——首先制定一个大体框架,然后根据框架进行具体的设计。

(2)细节——养成良好书写习惯和风格,便于阅读和修改;

(三)遇到问题解决过程的思考:

(1)反复阅读书本上的算法

(2)进行算法的测试,验证算法的正确性

(3)多次测试,最后找到解决方法,并在头文件中对每个模块的函数进行声明,在源文件中进行定义

(五)对软件开发的思考:

(1)软件开发是一项大的工程,不仅需要好的编码以及测试技术,还要注重软件本身的整体设计。

(2)这次课程设计是一人单独完成的,缺点是不能体验到软件开发过程中的那种团队精神。

参考文献:

1)数据结构(C语言版)严蔚敏吴伟民编著清华大学出版社。

2)C及C++程序设计(第三版)张富编著人民邮电出版社。

附上各种算法的效果图:直接插入算法:

折半插入排序:

希尔排序:

冒泡排序:

快速排序:

直接选择排序:

堆排序:

归并排序:

基数排序:

相关文档
最新文档