多种排序算法汇报.docVIP

  1. 1、本文档共12页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
多种排序算法比较分析 一 目的 利用《数据结构》课程的相关知识完成一个具有一定难度的综合设计题目,利用C/C++语言进行程序设计,并规范地完成课程设计报告。通过课程设计,巩固和加深对线性表、栈、队列、字符串、树、图、查找、排序等理论知识的理解;掌握现实复杂问题的分析建模和解决方法(包括问题描述、系统分析、设计建模、代码实现、结果分析等);提高利用计算机分析解决综合性实际问题的基本能力。编程实现希尔、快速、堆、归并四种排序算法,并计算每种算法的比较、移动次数。要求待排序数据有系统随机产生,每次选择一种具体的算法将其排序,然后统计排序所需的时间。 二 需求分析 本程序对以下几种内部排序算法进行实测比较:起泡排序、快速排序、堆排序。 程序用来做比较的数据要用伪随机数产生器产生;待排序的元素的为整数;分5组不同的数据,进行不同的测试 记录每种算法的每次运行的时间、将每种算法运行的5次时间加和,然后求其平均值 以下记录各个函数的大概功能 void HeapSort(HeapType *H); 该函数将由系统随机产生的数字经堆排序,然后测试其排序所需的时间 void HeapAdjust(HeapType *H,int s,int m); 该函数将排序后的数据调整 void QSort(SqList *L,int low,int high); 快速排序函数 int Partition(SqList *L,int low,int high); 快速排序算法中的具体比较和移动 void BubbleSort(SqList *L,int k); 起泡排序函数 void print(HeapType L); 显示每次排序后的每组数字 void Initialize(SqList *L); 调用该函数将5组的数据填充,数据有系统随机产生 void show_time_test(); 显示每组排序所需要的时间,即显示3种排序方法排序的时间 void show_menu(); 显示可选菜单 三 概要设计 1、名称: 该程序的主要流程图如下,它简略的描述了程序的大致流程: 存储结构: #define MAXSIZE 500 /* 一个用作示例的小顺序表的最大长度 */ typedef struct{ int r[MAXSIZE+1]; /* r[0]闲置或用作哨兵单元 */ int length; /* 顺序表长度,除去哨兵的点 */ }SqList; /* 顺序表类型 */ typedef SqList HeapType; 该结构体作为存储数据的顺序表,r[0]作为闲置点,而length作为顺序表的长度 其中typedef语句用来声明自定义数据类型 {{0,0,0,0,0},{0,0,0,0,0},{0,0,0,0,0}} ; 声明3*5的数组,用来存储3种排序算法的5次排序时间 冒泡排序算法描述: 两两比较相邻记录的关键码,如果反序则交换,直到没有反序记录为止。 实现过程(如图2)。 对于数组(21 25 49 16 08)。 初态: 21 25 49 16 08 第一趟: 21 25 16 08 49 第二趟: 21 16 08 25 49 第三趟: 16 08 21 25 49 第四趟: 08 16 21 25 49 快速排序算法的大致流程: 首先选择一个基准,将记录分割为两部分,左支小于或等于基准,右支则大于基准,然后对两部分重复上述过程,直至整个序列排序完成。 实现过程(如图5) 对于数组(21 25 49 16 08)。 初态: R[0]=21 21 25 49 16 08 low 第一趟: R[0]=21 08 25 49 16 08 low R[0]=21 08 25 49 16 25 R[0]=21 08 16 49 16 25 low R[0]=21 08 16 49 16 25 R[0]=21 08 16 49 49 25 R[0]=21 low=high 08 16 21 49 25 5、关键算法三: 实现手动与计算机随机双重输入。手动输入检查程序的正确性,计算机随即输入,可以比较各排序算法的性能。 void Rand()//随机数函数 鉴于数据较多,让系统随机产生数据,故省略手动输入。 关键算法四 : 纠错功能。在用户输入非法数据时,给予警告,并要求用户重新输入,不必重启程序 四 详细设计 1、随机产生数据,出入5个数组中

文档评论(0)

jdy261842 + 关注
实名认证
文档贡献者

分享好文档!

1亿VIP精品文档

相关文档