- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
部排序算法比较
第三章 内部排序算法比较 PAGE 23
第三章 内部排序算法比较
3.1. 问题描述
3.1.1
设计程序实现六种方法的内部排序:起泡排序、直接插入排序、简单选择排序、快速排序、希尔排序、堆排序。并对各个内部排序算法进行实测比较。
3.1.2
程序分别对六种常用的内部排序算法进行实测比较:起泡排序、直接插入排序、简单选择排序、快速排序、希尔排序、堆排序。待排序表的表长不小于100,其中数据要用随机数产生程序产生,要求用多组不同的输入数据进行比较,比较的指标为:有关键字参加的比较次数和关键字的移动次数(关键字交换计为3次的移动)。
3.1.3
因为所产生的数据是随机数,所以只需要用户输入要产生的随机数的个数。所以可根据需要设置以下一组数: 5, 10, 50, 300, 1000, 7000, 20000, 50000。
3.2. 需求分析
3.2.1 程序的基本功能
首先用户输入要测试的随机数的个数,然后可以进行各个选项对数据进行不同的测试,程序能分别输出用起泡排序、直接插入排序、简单选择排序、快速排序、希尔排序、堆排序所用的移动关键字的步数,以便比较各个排序算法的效率。
3.2.2 输入值的形式和范围
程序设定输入的整型数据在100000之内。
3.2.3 输出形式
程序将产生的随机数以数组的形式储存,并在屏幕上依次输出,排序后得到的有序数组也同样依次输出,同时输出跟踪的来的总移动步数。
3.2.4 测试数据要求
在调试时,为了能方便判断得出的结果是否正确可使用数量小的随机数,如3、4、5。在调试确定算法能得出正确结果后测试数据要求每组随机数的个数应大于100,最好更长,这样才能更加容易得出各个排序算法在时间上的不同。
3.3. 概要设计
3.3.1 主程序流程及模块调用关系
(1)主程序流程图:
一. 产生随机数。 二. 各个排序算法
开始
开始
程序
开始
开始
输入产生随机数的个数
输入产生随机数的个数 N
输入选择c
输入选择c
C=1C=3
C=1
C=3
C=5
产生N个随机数并放入一个数组中
C=2
C=2
C=6C
C=6
C=4
结束
Shell排序处理简单选择排序处理起泡排序处理
Shell排序处理
简单选择排序处理
起泡排序处理
堆排序处理快速排序处理直接插入排序处理
堆排序处理
快速排序处理
直接插入排序处理
结束
结束
图 3-1 程序流程图
(2)模块调用关系图见下页:
随机数产生模块
随机数产生模块
起泡排序模块
起泡排序模块
主程序
主程序
直接插入排序模块
直接插入排序模块
简单选择排序模块
简单选择排序模块
快速排序模块
快速排序模块
Shell排序模块
Shell排序模块
堆排序模块
堆排序模块
图 3-2
3.3.2 核心的粗线条伪码算法
设置一个类 class Algorithm{
……..
将各个排序算法的函数作为类中的构造函数
……..
}A;
Algorithm Sorting ( )
1. 输入随机数的个数N;
2. 调用随机数产生函数产生个N随机数并储存到
Array[1]~~Array[N]中.
3. 输入选择功能
4. switch(c)
{
case 1:
调用起泡法对所产生的随机数进行排序;
case 2:
调用直接插入法对所产生的随机数进行排序;
case 3:
调用简单选择法对所产生的随机数进行排序;
case 4:
调用快速排序法对所产生的随机数进行排序;
case 5:
调用Shell排序对所产生的随机数进行排序;
case 6:
调用堆排序对所产生的随机数进行排序;
case 7:
产生下一组随机数据
case 8:
结束并 退出程序
3.4. 详细设计
3.4.1 实现概要设计的数据类型.
定义一个类,将每个算法都现在该类中:
Class Algorithm{
Public:
Bubblesort(){……….}
StraightInsertsort(){……….}
Selectsort(){……….}
Quiksort(){……….}
Shellsort(){……….}
Heapesort(){……….}
}A;
3.4.2 每个操作的伪码算法.
(1).起泡法排序伪码算法:
Algorithm BubbleSort( ){
while(k1)
{//i1表明上一趟曾进行过记录交换
文档评论(0)