题目3排序综合报告讲解.docx

上传人:b****1 文档编号:298480 上传时间:2022-10-08 格式:DOCX 页数:27 大小:80.88KB
下载 相关 举报
题目3排序综合报告讲解.docx_第1页
第1页 / 共27页
题目3排序综合报告讲解.docx_第2页
第2页 / 共27页
题目3排序综合报告讲解.docx_第3页
第3页 / 共27页
题目3排序综合报告讲解.docx_第4页
第4页 / 共27页
题目3排序综合报告讲解.docx_第5页
第5页 / 共27页
点击查看更多>>
下载资源
资源描述

题目3排序综合报告讲解.docx

《题目3排序综合报告讲解.docx》由会员分享,可在线阅读,更多相关《题目3排序综合报告讲解.docx(27页珍藏版)》请在冰豆网上搜索。

题目3排序综合报告讲解.docx

题目3排序综合报告讲解

理学院

课程设计说明书

课程名称:

数据结构与算法A设计实践

课程代码:

6015059

题目三:

排序综合

开始时间:

2015年12月28日

完成时间:

2016年01月10日

课程设计成绩:

学习态度及平时成绩(30)

技术水平与实际能力(20)

创新(5)

说明书撰写质量(45)

总分(100)

指导教师签名:

年月日

数据结构与算法A设计实践任务书

学院名称:

理学院课程代码:

_6015059________

专业:

信科年级:

2012

一、设计题目

排序综合(限最多1人完成)

二、主要内容

利用随机函数产生N个随机整数(20000以上),对这些数进行多种方法进行排序。

三、具体要求及提交的材料

1)至少采用4种方法实现上述问题求解(提示,可采用的方法有插入排序、希尔排序、起泡排序、快速排序、选择排序、堆排序、归并排序)。

并把排序后的结果保存在不同的文件中。

2)统计每一种排序方法的性能(以上机运行程序所花费的时间为准进行对比),找出其中两种较快的方法。

如果采用4种或4种以上的方法者,可适当加分。

测试数据及测试结果请在上交的资料中写明;必须上机调试通过

按《数据结构课程设计大纲》中的要求完成课程设计报告格式。

 设计结束后,每个学生必须上交的材料有:

1《课程设计报告》打印稿一份2.课程设计的源代码电子文档一份

四、主要技术路线提示

无。

五、进度安排

共计两周时间,建议进度安排如下:

1.选题,应该在上机实验之前完成2.需求分析、概要设计可分配4学时完成

2.详细设计可分配4学时4.调试和分析可分配10学时。

2学时的机动,可提前安排部分提前结束任务的学生答辩

六、推荐参考资料

1.冯博琴等编著,《软件技术基础》(修改版),西安交通大学出版社,1997

2.严蔚敏等著,《数据结构》,清华大学出版社,2003

3.李芸芳等著,《软件技术基础》(第二版),清华大学出版社,2000

4.徐孝凯等著,《数据结构(C语言描述)》,清华大学出版社,2004

指导教师签名日期年月日

系主任审核日期年月日

摘要

排序(sorting是计箅机程序设计的一种重要操作,它的功能是将一组任意顺序数据元素(记录),根据某一个(或几个)关键字按一定的顺序里新排列成为有序的序列。

由于待排序的记录数量不同,使得排序过程中涉及的存储器的不同,可将排序方法分为两大类:

一类是内部排序,指的是待排序的记录存放在计算机随机存储器中进行的排序过程;另一类是外部排序,指的是待排序记录的数量很大,以致内存一次不能容纳全部记录,在排序过程中尚需要对外存进行访问的排序过程。

本次课程设计主要是关于内部排序的。

内部排序的方法很多,但就其全面性能而言,很难提出一种被认为是最好的方法,每一种方法都有各自的优缺点,适合在不同的环境(如记录的初始排列状态等)下使用。

本次课程设计就是内部排序中的几个常用排序方法。

分析了排序的实质,排序的应用,排序的分类,利用C语言采用数组存储结构编程实现了本排序综合系统,该系统包含了几种常见的排序方法,有直接插入排序、希尔排序、冒泡排序、快速排序、简单排序。

关键词:

内部排序,外部排序,重新排列,关键字

1引言

1.1问题的提出

排序是计算机内经常进行的一种操作,其目的是将一组“无序”的记录序列调整为“有序”的记录序列。

分内部排序和外部排序。

若整个排序过程不需要访问外存便能完成,则称此类排序问题为内部排序。

反之,若参加排序的记录数量很大,整个序列的排序过程不可能在内存中完成,则称此类排序问题为外部排序。

内部排序的过程是一个逐步扩大记录的有序序列长度的过程。

排序算法是数据结构学科经典的内容,其中内部排序现有的算法有很多种,其中包含冒泡排序,直接插入排序,简单选择排序,希尔排序,快速排序,堆排序等,各有其特点。

对排序算法比较的分析可以遵循若干种不同的准则,通常以排序过程所需要的算法步数作为度量,有时也以排序过程中所作的键比较次数作为度量。

特别是当作一次键比较需要较长时间,例如,当键是较长的字符串时,常以键比较次数作为排序算法计算时间复杂性的度量。

当排序时需要移动记录,且记录都很大时,还应该考虑记录的移动次数。

究竟采用哪种度量方法比较合适要根据具体情况而定。

在下面的讨论中我们主要考虑所用时间作为复杂性的度量。

1.2C语言

C语言既有高级语言的特点,又具有汇编语言的特点;既是一个成功的系统设计语言,有时一个使用的程序设计语言;既能用来编写不依赖计算机硬件的应用程序,又能用来编写各种系统程序;是一种受欢迎、应用广泛的程序设计语言。

1.3C语言发展过程

1973年,美国贝尔实验室的D.M.RITCHIE在B语言的基础上最终设计出了一种新的语言,他取了BCPL的第二个字母作为这种语言的名字,这就是C语言。

1977年DennisM.Ritchie发表了不依赖于具体机器系统的C语言编译文本《可移植的C语言编译程序》。

1978年BrianW.Kernighian和DennisM.Ritchie出版了名著《TheCProgrammingLanguage》,从而使C语言成为目前世界上流行最广泛的高级程序设计语言。

1.4任务与分析

前面分析了排序的种类以及过程,因此,本系统实现了几种常用的排序方法,包括:

直接插入排序、希尔排序、冒泡排序、非递归的快速排序、简单排序。

2系统分析

2.1功能需求

2.1.1总体要求

任务:

机函数产生N个随机整数(20000以上),对这作数进行多种方法进行排序。

要求:

1)至少采用4种方法实现上述问题求解(提示,可采用的方法有插入排序、希尔排序、起泡排序、快速排序、选择排序、堆排序、归并排序)。

并把排序后的结果保存在不同的文件中。

2)统计每一种排序方法的性能(以上机运行程序所花费的时间为准进行对比),找出其中两种较快的方法。

如果采用4种或4种以上的方法者,可适当加分。

2.1.2本人所做模块

通过对任务的要求分析,我将任务分成了几个模块,从而实现了任务的总体要求。

包括了输入模块、选择排序方法模块、输出模块。

其中:

1、输入模块

利用随机函数产生N个数(20000以上),产生的数据个数由用户自己输入。

2、选择排序方法模块

在菜单中通过输入相应的选项编号来选择采用何种算法排序,包括的排序算法有:

直接插入排序、希尔排序、冒泡排序、快速排序、简单排序。

3、输出模块

输出排序前的,或者排序后的数据元素到屏幕上显示,并且输出以某种算法排序后的数据元素到文件中保存。

最后让主函数对这几个模块进行调用,从而实现全部功能。

2.2数据需求

利用随机函数产生的随机数。

3详细设计与分析

3.1设计思路

1、直接插入排序

思路:

设有一组关键字{K1,K2,……,Kn},排序开始便认为K1是一个有序的序列,让K2插入到表长为1的有序序列,使之成为一个表长为2的有序序列,让K3插入到表长为2的有序序列,使之成为个表长为3的有序序列,依次类推,最后让Kn插入上述表长为n-1的有序序列,得到一个表长为n的冇序序列。

2、希尔排序

思路:

先取一个正整数dl(dl

3、冒泡排序

思路:

依次比较相邻的两个数,将小数放在前面,大数放在后面。

即在第一趟:

首先比较第n个和第n-1个数,将小数放前,大数放后,然后比较第n-1个数和第n-2个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。

至此第一趟结束,将最小的数放到了最前。

在第二趟:

仍从第n个数开始比较,将小数放前,大数放后,一直比较到第二个数(第一的位置上已经是最小的),第二趟结束,在数第二的位置上得到一个新的最小数(其实在整个数列中是第二小的数)。

如此下去,重复以上过程,直至最终完成排序。

用二循环实现,外循环变量设i,内循环变量设为j。

每次进行比较的两个元素都是与内循环j有关的,它们可以分别用a[j]和a[j+1]标识。

4、快速排序

思路:

以第一个关键字K1为控制字,将[K1,K2..Kn]分成两个子区,使左区的所有关键字小于等于K1,右区所有关键字大于等于K1,在子区内数据尚处于无序状态。

将右区首、尾指针保存入栈,对左区进行与第

(1)步相类似的处理,又得到它的左子区和右子区。

重复第

(1)、

(2)步,直到左区处理完毕。

然后退栈对一个个子区进行相类似的处理,直到栈空。

5、简单排序

思路:

在n个记录中,用两重循环,外层循环i从第一个元素a[0]开始至最后一个元素a[n-l],内层循环j从外层循环所值元素a[i]的下—个元素a[jl=a[i+l]开始至最后一个元素a[n-l]搜索,只要找到比a[i]小的元素,便与a[i]交换,如此重复执行操作,当外层循环完毕后,全部记录就排序完成了。

3.2整体设计方案

此课题是研究的是排序问题,为了直观和方便,画出流程图如下图1:

结束

保存排序后文件

退出该系统

简单选择排序

快速排序函数

产生随机数

直接插入排序函数

希尔排序函数

冒泡排序函数

选择操作项

调用欢迎界面函数startface()

开始

图1程序总流程图

 

通过流程图可以从中看出操作过程以及函数间的调用关系。

3.3各种操作函数

根据模块的划分,将函数对模块进行实现,主要函数如下:

(1)创建一个数组函数:

intcreat()

(2)输出数组函数:

voidprint(structelementa[],intn)

(3)保存函数:

voidsave(structelementa[],intn,charfilename[])

(4)直接插入排序函数:

voidinsertsort(structelementa[],intn)

(5)希尔排序函数:

voidshellsort(structelementa[],intn)

(6)冒泡排序函数:

voidbublesort(structelementa[],intn)

(7)快速排序分区处理:

intpartition(structelementa[],intlow,inthigh)

(8)快速排序函数:

voidquicksort(structelementa[],intlow,inthigh)

(9)简单排序函数:

voidselesort(structelementa[],intn)

3.4主函数

//==========通过该函数对其他函数的调用,实现系统功能

int_tmain(intargc,_TCHAR*argv[])

{

intnum,c;

boolflag=0;

clock_tstart,end;

charfile1[300]="直接插入排序.txt";

charfile2[300]="希尔排序.txt";

charfile3[300]="冒泡排序.txt";

charfile4[300]="快速排序.txt";

charfile5[300]="选择排序.txt";

while

(1)

{

menu();

printf("请输入操作选项:

");

s

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 总结汇报 > 学习总结

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1