北邮数据结构实报告排序.doc

  1. 1、本文档共5页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构实验报告 实验名称: 实验四——排序 学生姓名: 班 级: 班内序号: 学 号: 日 期: 2014年12月19日 1.实验要求 实验目的 通过实现下述实验内容,学习、实现、对比各种排序算法,掌握各种排序算法的优劣,以及各种算法使用的情况。 实验内容 使用简单数组实现下面各种排序算法,并进行比较。 排序算法: 1、插入排序 2、希尔排序 3、冒泡排序 4、快速排序 5、简单选择排序 6、堆排序(选作) 7、归并排序(选作) 8、基数排序(选作) 9、其他 要求: 1、测试数据分成三类:正序、逆序、随机数据 2、对于这三类数据,比较上述排序算法中关键字的比较次数和移动次数(其中关键字交换计为3次移动)。 3、对于这三类数据,比较上述排序算法中不同算法的执行时间,精确到微秒(选作) 4、对2和3的结果进行分析,验证上述各种算法的时间复杂度 编写测试main 函数测试线性表的正确性。 2. 程序分析 首先,题目要求测试不同的数据,所以可以手动输入待排序元素。其次,由于对一组数据要求用不同的排序算法来处理,所以需要一个复制函数把排序前的无序数组寄存出去,为下一次排序做准备。再次,由于每次排序后都需要把排序后的结果打印出来,代码是一样的,根据相同的代码可以封装成一个函数的思想,所以还需增加一个打印函数。 2.1 存储结构 本程序采用简单数组来储存输入的待排序数组 2.2 关键算法分析 核心算法思想: 1. 利用教材讲述的基本算法思想,实现七种排序算法,统计其运行相关数据。 2. 将七种排序函数入口地址作为函数指针数组,实现快速调用和统计。使得程序代码可读 性增、结构更加优化。 关键算法思想描述和实现: 关键算法1: 实现七种算法的基本排序功能。 插入排序:依次将待排序的序列中的每一个记录插入到先前排序好的序列中,直到全部记录排序完毕。插入排序的思想是:每次从无序区取一元素将其添加到有序区中。 希尔排序:先将整个序列分割成若干个子列,分别在各个子列中运用直接插入排序,待整个序列基本有序时,再对全体记录进行一次直接插入排序。 冒泡排序:两两比较相邻记录的关键码,如果反序则交换,直到没有反序记录为止。 快速排序:首先选择一个基准,将记录分割为两部分,左支小于或等于基准,右支则大于基准,然后对两部分重复上述过程,直至整个序列排序完成。 选择排序:从待排序的记录序列中选择关键码最小(或最大)的记录并将它与序列中的第一个记录交换位置;然后从不包括第一个位置上的记录序列中选择关键码最小(或最大)的记录并将它与序列中的第二个记录交换位置;如此重复,直到序列中只剩下一个记录为止。 2.3 其他 时间复杂度与空间复杂度 理论分析可以得出各种排序算法的时间复杂度和空间复杂度,如下表所示: 排序方法 平均情况 最好情况 最坏情况 辅助空间 直接插入排序 O n2 O n O n2 O 1 希尔排序 O nlog2n ~O n2 O n1.3 O n2 O 1 起泡排序 O n2 O n O n2 O 1 快速排序 O nlog2n O nlog2n O n2 O log2n ~O n2 简单选择排 O n2 O n2 O n2 O 1 3. 程序运行结果 程序运行框图: 实际测试和分析: 实际运行结果如下: 正序排序 倒序排序 乱序排序 4. 总结 1、在初期构思代码的时候,首先构造了各种算法的基本实现代码,封装成类,已经能够实现七种排序的基本功能,并且测试无误。后来考虑能否优化本程序,首先考虑到测试算法的需求,需要大量随机数,因为增添了随机函数发生器,满足各种测试条件的需求。之后考虑如何能简化代码以实现多达七种排序算法的简单调用、乱序和顺序以及逆序数据的分别排序和性能指标统计、算法移动次数和比较次数的精确统计。如果设计不合理,将使得主调函数的调用代码冗长,可读性变差。因而采用了函数指针数组和统一的接口函数,采用二维数组存储移动次数和比较次数,调用精确的系统函数实现时间的统计。此外还添加了一些列优化,特别是函数封装的方法,使得程序的结构变得更加合理,版面风格也变得好看,可读性增强。 2、程序的优化是一个艰辛的过程,如果只是实现一般的功能,将变得容易很多,当加上优化,不论是效率还是结构优化,都需要精心设计。这次做优化的过程中,遇到不少阻力。由于优化中用到很多类的封装和访问控制方面的知识,而这部分知识恰好是大一一年学习的薄弱点。因而以后要多花力气学习C++编程语言,必须要加强这方面的训练,这样才能在将编程思想和数据结构转换为代码的时候能得心应手。 3、改进:本程序代码设计时运用了递归的调用方式,效率还可以通过将其转换为栈模拟的方式得以提高。在实现类的封装的时候

文档评论(0)

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

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

1亿VIP精品文档

相关文档