数据结构课程设计之排序综合绝对经典各种排序方法.doc

数据结构课程设计之排序综合绝对经典各种排序方法.doc

  1. 1、本文档共25页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构课程设计之排序综合绝对经典各种排序方法

##大学 数据结构课程设计报告 题目: 排序综合 院(系): 计算机工程学院 学生姓名: 班级: 学号: 起讫日期: 2011/06/21-2011/07/01 指导教师: 2010—2011年度 第 2 学期 一、需求分析 1.问题描述: 排序综合,利用随机函数产生20000个随机数,使用多种排序方法进行排序,将排序结果保存在不同的文件中,显示排序结果;利用计时函数统计每个算法所消耗时间,找出其中两种较快的方法,程序的重点是各种排序方法的算法实现过程,同时由于排序的数的个数较大,要考虑到输入输出缓冲区对程序的影响,适时清空输入输出缓冲区;还要注意设置合适的数据存储结构类型,以利于算法实现。 2.基本功能 本设计要实现对20000个数的排序,其中主要包括:利用随机数函数产生20000个数;利用6种排序方法对它们进行排序(快速排序,起泡排序,直接插入排序,归并排序,简单选择排序和堆排序),同时用计时函数统计各个排序方法所耗时间,以找出其中两种最快的;显示排序结果,将各排序方法的排序结果保存在不同的文件(txt格式)中,显示排序结果。 3.输入输出 输入方面,本程序主要是在排序方法的选择上,设置一个类似菜单选择的界面即可;输出方面,本程序数据的个数较多,屏幕输出每隔10个数换行,文件输出中每隔100个数换行。 二、 概要设计 1.设计思路: 利用随机数函数产生20000个随机数,将产生的20000个数放到一个一维数组中,并显示20000个数;设置菜单选项,以选择6种不同的排序方法中的一种进行排序;采用每种排序方法时统计该算法耗时,在屏幕和文件中输出排序结果,之后回到菜单选择界面。拟采用的算法的简介---(1)快速排序:通过一趟排序将待排记录分割成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序。(2)冒泡排序:首先将第一个记录的关键字和第二个记录的关键字进行比较,若为逆序,则将两个记录交换之,然后比较第二个记录和第三个记录的关键字;以此类推,直至第n-1个记录和第n个记录的关键字进行过比较为止,结果使得关键字最大的记录被安置到最后一个记录的位置上;然后继续进行直至整个序列有序。(3)直接插入排序:先将序列中的第1个记录看成是一个有序的子序列,然后从第2个记录起逐个进行插入,直至整个序列变成关键字非递减有序序列为止,整个排序过程进行n-1趟插入。(4)归并排序:假设初始序列含有n个记录,则可看成是n个有序子序列,每个子序列的长度为1,然后两两归并,得到「n/2」个长度为2或1的有序子序列;在两两归并,......,如此重复,直至得到一个长度为n的有序序列为止。(5)简单选择排序:通过n-i次关键字间的比较,从n-i+1个记录中选出关键字最小的记录,并和第i个记录交换之,直至整个序列非递减。(6)堆排序:首先由无序序列建成一个堆,输出堆顶元素后,以堆中最后一个元素替代之,此时根节点的左右子树均为堆,则仅需自上至下进行调整即可,直至所有元素按非递减顺序输出。 2.数据结构设计: 本程序用到了数组和顺序表,相关定义为: const int MAXSIZE=20000; //顺序表的最大长度 typedef struct{ int key; //关键字项 }RedType; //记录类型 typedef struct{ RedType r[MAXSIZE+1]; //r[0]闲置或用作哨兵 int length; //顺序表长度 }Sqlist; //顺序表类型 typedef Sqlist HeapType; //堆采用顺序表存储表示 采用的数据结构与相应的算法有关,数据结构应利于算法的实现 3.软件结构设计: 模块之间的关系图: (1).产生20000个随机数并显示过程 int i,j,a[20001]; srand((unsigned)time(NULL)); for(i=1;i20001;i++) a[i]=rand()%32768; for(i=1;i20001;i++) { coutsetw(6)a[i] ; if(i%10==0) coutendl; } (2).排序方法 ①快速排序: Qsort(L,1,20000); void Qsort(Sqlist L, int low, int high) { int pivotloc; if (low high) {

您可能关注的文档

文档评论(0)

xjj2017 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档