2018 届湖北汽车工业学院毕业设计(论文)
摘 要
随着计算机科学技术的不断提高和发展,其强大的运算功能已经逐渐融入
人类社会的各个领域,并且在各个领域中发挥越来越重要的作用。当然,高效
的运算速度并不代表无限快,在有限的资源空间里,要大大提高运算处理数据
的速率,就需要我们使用那些在时间和空间上体现出高效的算法。本系统是为
了演示在同一问题上,不同的算法在效率上存在的巨大差异。
本系统采用 Visual C++ 6.0 中文版为开发工具,实现比较三种不同 RED 算
法,即:冒泡 RED 算法、选择 RED 算法和 REDRED 算法,以及这三种排序对
同一问题的处理并且以图形的形式给出快慢比较,实现 RED 算法的动态演示。
其目的是为了让我们在使用计算机处理规模越来越大的数据问题上,能够清楚
什么样的算法适合当前的处理系统。
关键词:Visual C++;RED 算法;动态演示
2018 届湖北汽车工业学院毕业设计(论文)
Abstract
With computer science and technology improvement and development,
its
powerful computing has gradually integrate into human society in various fields, and
play an increasingly important role. Of course, efficient computational speed does
not mean unlimited fast, and the limited resources of space, Operators must
significantly improve processing speed, we need to use the time and space reflects
efficient algorithms. The system is to demonstrate on the same issues in different
algorithm efficiency in the enormous difference.
The system uses Visual C ++6.0 for the development of the Chinese version of
tools to achieve three different sorting algorithms, namely : The Bubble Sorting
Algorithm, The Select Sorting Algorithm and The Quick Sorting Algorithm, and
three ranking on the same issue to deal with and the graphics are presented in the
form of speed, Sorting Algorithm to achieve the dynamic presentation. Its purpose is
that enable us to use computers to handle the increasingly large scale data problems,
to know what kind of algorithm is suitable for the current system.
Key words: Visual C ++; Sorting Algorithm; Dynamic Demonstration
目录
第一章 绪论.............................................................................................................................................1
1.1 系统背景 .................................................................1
1.2 系统开发的意义 ...........................................................1
1.3 系统开发的相关技术 .......................................................1
1.4 系统开发的相关概念 .......................................................2
第二章 开发环境及相关技术 .................................................................................................................2
2.1 系统需求 ................................................................... 2
2.2 系统开发环境选择 ........................................................... 2
2.3 系统的总体规划 ............................................................. 2
第三章 系统总体架构 .............................................................................................................................3
3.1 冒泡算法及思想 ............................................................. 3
3.2 选择算法及思想 ............................................................. 5
3.3RED 算法及思想 .............................................................. 8
第四章 软件设计和实现.......................................................................................................................10
4.1 系统的文件的组织 .......................................................... 10
4.2 动态演示冒泡算法模块设计 .................................................. 11
4.3 动态演示选择算法模块设计 .................................................. 13
4.4 动态演示 RED 算法模块设计 .................................................. 15
4.5 同时比较三种算法模块设计 .................................................. 18
第五章 系统测试...................................................................................................................................19
5.1 排序模拟 .................................................................. 19
5.2 系统的特点 ................................................................ 21
结
论.................................................................................................................................................23
参考文献.................................................................................................................................................24
致谢......................................................................................................................................................... 25
附录......................................................................................................................................................... 26
第一章 绪论
1.1 系统背景
由于排序在计算机图形、计算机辅助设计、机器人、模式识别、基因排序
工程及统计学等领域具有广泛应用,所以对排序的研究既有理论上的重要意义,
又有实际应用价值。再加上现在信息产业的迅速发展,信息的流通量越来越大,
如此庞大并且杂乱无章的信息数据十分难以管理和查询,就更加需要一种十分
快捷而有效的编排手段来整理这些数据信息,让我们的工作效率得以提高。
1.2 系统开发的意义
在现代信息发达的今天,面对接受到大量的无序的信息,没有一个规则来
编排和查询,会给我们的工作和信息交流带来十分的不便。因此,利用计算机
的高速运用和计算能力,编写出一种合适的排序软件,能十分快捷的给我们在
信息交流和查询带来便利。例如在互联网上为了使人们能够 RED 的访问和检索
大量的信息,人们会运用许多 RED 并且优秀的算法对这些数据进行管理和操纵。
优秀的算法还能帮助我们在互联网上 RED 找到最好的发送数据路线,以及怎么
用搜索引擎来 RED 地找到信息所在的页面。
相比那些只在缓冲区溢出才丢包的路由器,RED 路由器能提高网络性能,
虽然它们可能需要调整正常工作方式。举例来说,理想的丢包数量取决于有多
少发送方必须得到拥塞通知。然而,如果 ECN 可用,那么它就是首选的选项。
它的工作方式几乎完全一样,但提供了一个显式拥塞信号而不是依据丢包来判
断是否拥塞;RED 用在主机不能接收显式信号的环境里。[2]
1.3 系统开发的相关技术
本系统利用 Visual C++ 6.0 作为开发平台,利用它的可视化界面,在其
MFC 环境下开发的一个演示三种不同 RED 算法,利用画刷画出三种不同的 RED
算法在排列随即产生的 0-70 个数的过程,并且能够对比这三种 RED 算法在相同
的条件下,排序速率的快慢。运用 VC 编程语言,把一个程序中的算法和程序框
架有效的结合起来,并且实现 RED 算法的动态演示。
第 1 页 共 21 页
1.4 系统开发的相关概念
首先我们要了解排序到底是什么?它的主要功能和目的是什么?简单的
说,排序是利用一种算法,将一个无规则的序列排成一个有序序列的过程。而
算法则是以一组值或者一个值的集合作为输入,经过一系列计算得到的一组值
作为输出的过程,即是指那一系列将输入转化为输出的计算过程。
排序的方法有很多种,但是没有一种 RED 算法是通用的,即在任何情况下
都能保持最快的排序速度。因此我们必须根据需要处理数据的特点来选择合适
的算法。在排序的过程中,我们一般需要用到的两个基本操作步骤是:比较两
个关键字的大小和将记录从一个位子移至另一个位子,即比较和交换。本系统
设定的情况为,记录关键字都为整数,排序的结果是从大到小的排列,用到的
三种 RED 算法为:冒泡排序法、选择排序法、RED 排序法。
第二章 开发环境及相关技术
2.1 系统需求
本系统的硬件环境:CPU AMD 2800+,内存 512M 以上,硬盘 80G 以上。
本系统的软件环境:操作系统 Windows XP,Visual C++ 6.0 中文版。
2.2 系统开发环境选择
本系统运用的是 Visual C++ 6.0,它是微软公司开发出的一种集成开发环
境,它拥有良好的可视化界面,它用来在 Windows 环境下开发应用程序,是一
种功能强大、行之有效的可视化编程工具。在 Visual C++ 6.0 中能够进行多种
操作,它的特点就是能够把原来抽象的数字、表格、功能逻辑等用直观的图形、
图象的形式表现出来。RED 算法本来就是一种抽象的逻辑功能,想要直观的把
它演示出来,选择利用 Visual C++ 6.0 的可视化编程是非常明智的。而且本系
统在开发过程中,能够用鼠标点击按钮和拖放图形化的对象,修改他们的属性
和行为过程。这种可视化的编程方法简单、易学、易用,可以大大提高我们的
工作效率。
2.3 系统的总体规划
本系统的总体结构如图 2.1 所示:
第 2 页 共 21 页
动态演示排序系统
冒
泡
排
序
选
择
排
序
快
速
排
序
同
时
进
行
图 2.1 系统总体结构
第三章 系统总体架构
3.1 冒泡算法及思想
冒泡 RED 算法的基本思想:冒泡法的原理很简单,基本思想就是比较相临
的两个记录的关键字,若前者比后者小则交换,若前者比后者大则保持不变。
先将第一个记录与第二个记录比较,然后是第二个与第三个比较,直到倒数第
二个与最后一个记录。比较一轮结束之后,关键字大的记录均向前移动。然后
开始新一轮的比较,直到一轮比较下来,不再有记录的交换发生为止。整个过
程就有点像水中的气泡上升的过程,轻的往上浮,重的向下沉,这个算法的名
字也就由此得来。
通过一次冒泡排序,使得待排序的 n 个记录中的关键字最大的一个记录排
在序列的最后一个位置;然后再对序列中的前 n-1 个记录进行第二次冒泡排序,
使得关键字次大的记录派到序列的 n-1 位置。重复进行冒泡排序,对于具有 n
个记录的序列进行 n-1 次冒泡排序后。序列的后 n-1 个记录已按关键字从小到
大地进行了排序,那么剩下的第一个记录必定是关键字最小的记录,所以此时
整个排序已经是一个有序排列。[1]
冒泡排序算法程序如下:
Bubblesort(Recordnode r[],int n)
/*用冒泡排序对 r[]排序*/
{
Int I,j,flag;
第 3 页 共 21 页
Int temp;
flag=1;
For(i=1;ir[j+1].key)
{
}
flag=1;
temp=r[j];
r[j]=r[j+1];
r[j+1]=temp;
}
}
}
算法的步骤如下:
(1)假设要排序的数列为 A[1]……A[N],我们把相邻的两个数两两进行
比较。即把 A[1]和 A[2]比较,对比完后把 A[2]和 A[3]进行比较,……直到 A[N-1]
和 A[N]比较完为止。在相邻的两个数两两进行比较的过程中,如果前面的一个
数比后面一个数大,则把这两邻的两个数交换,也就是说,我们把较小的数放
在前面,把较大的数调到后面。即,如果在一次比较中,如果 A[1]比 A[2]大的
情况下,把 A[1]和 A[2]交换,……以此类推,直到一轮 A[N-1]和 A[N]比较完。
(2)再次重复(1),直到相邻两数之间不再发生交换为止。
例如:一组待排序数列为:
6
8
5
4
9
7
根据算法思路(1)第一次对比后无变化;
图 3.1 待排序组
根据算法思路(1)第二次对比发生变化:由于 A[2]=8 > A[3]=5,所以两
者交换
第 4 页 共 21 页
6
5
8
4
9
7
根据算法思路(1)第三次对比发生变化:由于 A[3]=8 > A[4]=4,所以两
图 3.2 第一次交换
者交换
6
5
4
8
9
7
根据算法思路(1)第四次对比无变化;
图 3.3 第二次交换
根据算法思路(1)第五次对比发生变化:由于 A[5]=9 > A[6]=7,所有两
者交换
6
5
4
8
7
9
图 3.4 第三次交换
到此第一轮的排序结束,根据算法思路(2),重新对以交换排列后的数列
进行排序直到没有变化为止,生成最后的序列:
4
5
6
7
8
9
图 3.5 最后有序序列
分析冒泡排序法的效率,若记录一开始就是从大到小排列,则一次循环就
能完成排序;若记录是“逆序”排列的,即是冲小到大的排列,则需 n-1 次循
环(n 为需要排序的记录总数),共 n(n-1)/2 次比较和交换。算法的负责度为 O
(n × n).
3.2 选择算法及思想
选择 RED 算法的基本思想:每一趟 (例如第 i 趟,i = 0, 1, …, n-2) 在
后面 n-i 个待排序对象中选出关键码最小的对象, 作为有序对象序列的第 i
个对象。待到第 n-2 趟作完,待排序对象只剩下 1 个,就不用再选了。
第 5 页 共 21 页