动态排序算法演示软件设计

动态排序算法演示软件设计
动态排序算法演示软件设计

动态排序算法演示软件设计

南阳理工学院

本科生毕业设计(论文)

学院(系): 软件学院

专业: 软件工程

学生: 胡晓波

指导教师: 张枫

完成日期 2011 年 04 月

南阳理工学院本科生毕业设计(论文)

动态排序算法演示软件设计

——动态演示的实现

Sorting algorithms dynamic demonstration of software design ——the realization of dynamic demonstration

总计 : 20 页毕业设计(论文)

表格 : 14 个

插图 : 10 幅

南阳理工学院本科毕业设计(论文)

动态排序算法演示软件设计

——动态演示的实现

Sorting algorithms dynamic demonstration of software design ——the realization of dynamic demonstration

学院(系): 软件学院

专业: 软件工程

学生姓名: 胡晓波

学号: 68107183

指导教师(职称): 张枫(讲师)

评阅教师:

完成日期: 2011-4-1

南阳理工学院

Nanyang Institute of Technology

动态排序算法演示软件设计

动态排序算法演示软件设计

——动态演示的实现

软件工程胡晓波

[摘要]不管在现实世界还是在软件设计中,排序都是一种非常普遍的应用。排序算法是数据结构这门课程核心内容之一。它是计算机程序设计、数据库、操作系统、编译原理及人工智能等的重要基础,广泛的应用于信息学、系统工程等各种领域。学习排序算法是为了将实际问题中所涉及到的对象在计算机中对它们进行处理。该演示系统可以通过操作把数据结构中的主要排序常见的排序算法(有冒泡排序、选择排序、直接插入排序、希尔排序、快速排序、归并排序等)表示出来。系统具有两种模式:单步演示,用于教学和认知排序过程;统计模式,可以生成大规模数据验证各种算法的时间性能。并且在单步演示模式下,可以统计数据交换的次数。

[关键词]数据结构;排序算法;动态演示

1

动态排序算法演示软件设计

Sorting algorithms dynamic demonstration of software design

——the realization of dynamic demonstration

Software Engineering Major HU Xiao-bo

Abstract: Sorting is a very popular application, whether in the real world or the design of software. Sorting algorithm is one of the most important core contents in course of data structure. Sorting algorithm which is widely used in information science, systems engineering and other areas is the important basic of computer program

design,database,operating systems,complier theory, artificial

intelligence and etc. The purpose of learning Sorting algorithm is to process the objects involved in practical problem in computer. This demo system can display the main sorting algorithm which contains bubble sort, selection sort, straight insertion sort, shell’s so rt, quick sort and merging sort in data structure by operation.

The system has two modes which contain teaching mode which is used

to teach and learn the process of sort and statistical mode which can generate large sums of data to test the time performance of various sort algorithms. And the system can also count the number of exchange in the statistical mode.

Key words: Data structure; sorting algorithm; dynamic demonstration

2

动态排序算法演示软件设计

目录

1 绪

论 ....................................................................

1 1.1 研究背景及意义 ....................................................

1

1.1.1 研究背景 .....................................................

1

1.1.2 研究目的和意义 ...............................................

1 1.

2 研究现状 ..........................................................

1 1.3 本文主要内容 ......................................................

2

2 需求及技术分

析 .......................................................... 2 2.1 任务概述 . (2)

2.1.1 预期目标 .....................................................

2

2.1.2 条件与限制 ...................................................

2 2.2 功能需求 ..........................................................

2

2.2.1 功能描述 .....................................................

2

2.2.2 功能模块图 ...................................................

3 2.3 模块功能与处理流程 ................................................

3 2.

4 功能需求与程序的关系 ..............................................

6 2.5 内部排序算法 ......................................................

6 2.6 Flash动画技

术 (7)

2.6.1 Flash动画原理 ................................................

7

2.6.2 Flash cs3简介 .................................................

8

2.6.3 ActionScript...................................................

8

3 系统设

计 (8)

3.1 数据定义 ..........................................................

8 3.2 程序流程图 ........................................................

8 3.3 系统结构设计 ......................................................

8

3.3.1 单步演示模式 .................................................

8

3.3.2 统计模式 ....................................................

10 3.4 接口设计 .........................................................

10

3.4.1 用户接口 ....................................................

10

3.4.2 外部接口 ....................................................

10

3.4.3 内部接口 ....................................................

10

4 系统实

现 (10)

3

动态排序算法演示软件设计

4.1 AS实现排序算法 ..................................................

10

4.1.1 直接插入排序演示 ............................................

10

希尔排序演示 (10)

4.1.2

4.1.3 直接选择排序演示 ............................................

11

4.1.4 冒泡排序演示 ................................................

11

4.1.5 快速排序演示 ................................................

11

4.1.6 归并排序演示 ................................................

11

4.2 动画制作步

骤 (11)

4.3 接口实

现 (12)

4.3.1 显示统计数据 ................................................

12

4.3.2 图表统计 ....................................................

12

4.4 界面设

计 (14)

4.4.1 主界面 ......................................................

14

4.4.2 教学模式动画演示 ............................................

14

4.4.3 统计模式动画演示 ............................................

15 5 系统说

明 (16)

5.1 系统综

述 (16)

5.2 用户界面原

型 (17)

5.3 尚未解决的问

题 ................................................... 17 6 运行与测

试 ............................................................. 17 结束语 ...................................................................

18 参考文

献 (19)

谢 .....................................................................

20

4

动态排序算法演示软件设计

1 绪论

1.1 研究背景及意义

1.1.1 研究背景

排序是计算机程序设计中的一种重要操作。排序算法是在整个计算机科学与技术领域上广泛被使用的术语。不管在现实世界还是在软件设计中,排序都是一种非常普遍的应用。排序算法是数据结构这门课程中的主要内容之一。排序算法是计算机程序设计、数据库、操作系统、编译原理及人工智能等的重要基础,广泛的应用于信息学、系统工

[1]程等各种领域。

排序算法应用广泛,也是算法教学的必备课程和基础课程,学生对一些主要的排序算法的理解程度很大程度决定了学生的基本算法的分析,设计能力。当前国内的排序算法教学大多还是老师口述和板书,教学过程复杂,空洞,学生理解起来也枯燥,抽象,并且对各种算法的适应场合混淆不清。排序算法演示软件有助于加深学生对排序算法的理解,和分析能力,也有助于老师的教学。

1.1.2 研究目的和意义

在研究各种算法的过程中,对其特点、效率、适用性等在不同的数据集上做全面的分析和比较,并以动态演示的方式展示一些经典排序算法运行过程,目的有以下五个方面:做算法的对比研究,培养研究能力;开发一个独立的软件,培养程序设计和软件开发能力;初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;提高综合运用所学的理论知识和方法独立分析和解决问题的能力;为教学服务,研究结果可对抽象的数据结构的教学有一定的辅助作用。

排序是一种非常普遍的操作,而排序的方法又非常的多,有的方法还比较复杂,不仅教师讲授困难,学生理解起来也有一定难度。把各种排序方法用动态可视化的形式展现出来,不仅可以提高教师教学质量,也加深学生对排序过程的理解,具有很大的应用价值。通过完成该课题,可以加强对知识的分析和理解,培养综合运用知识解决实际问题的能力,提高的实践操作技能。

1.2 研究现状

排序是计算机科学中最重要的研究问题之一,它在计算机图形、计算机辅助设计、机器人、模式识别及统计学等领域具有广泛的应用。由于它固有的理论上的重要性,2000年它被列为对科学和工程计算的研究与实践影响最大的10大问题之一。其应用早已不局限于简单的数值计算,而涉及到问题的分析、数据结构框架的设计以及插入、删除、

[2]排序、查找等复杂的非数值处理和操作。排序算法的学习就是为以后利用计算机资源高效地开发非数值处理的计算机程序打下坚实的理论、方法和技术基础。

1

动态排序算法演示软件设计

1.3 本文主要内容

排序的方法很多,但是就其全面性能而言,很难提出一种被认为是最好的方法,每一种方法都有各自的优缺点,适合在不同的环境下使用。如果排序中依据的不同原则对内部排序方法进行分类,则大致可分为直接插入排序、直接选择排序、冒泡排序、希尔

[3]排序、快速排序、堆排序六类。

本文描述了整个系统的分析设计过程,一个对几种内部排序算法进行比较,并用不同的测试数据进行测试比较的演示系统。比较的指标为关键字的比较次数和关

键字的移动次数。最后用图表数据汇总,从而对这些内部排序算法进行性能分析。系统具有两种模式:单步演示,用于教学和认知排序过程;统计模式,可以生成大规模数据验证各种算法的时间性能。并且在单步演示模式下,可以统计数据交换的次数。 2 需求及技术分析

2.1 任务概述

2.1.1 预期目标

运用软件工程思想,遵守开发流程,严格执行测试标准,开发出一套符合需求的教学软件产品。利用图形界面动态展示各种排序算法的工作过程,排序过程和对应伪代码同步显示,过程可控制:暂停,返回,数据生成等。

算法操作过程的动态可视化,系统的两种模式:单步演示模式,统计模式。

单步演示模式:用于教学和认知排序过程,在此模式下,用户选择一种排序算法,对一串数字的排序过程动态显示出来。用户再选择使用的排序算法,然后系统会动态的呈现整个算法的执行过程即该算法的交换过程并附以伪代码,供用户的教学和认知。同时在交换的过程中统计交换次数。

统计模式:在此模式下,用户输入一串数字或者选择生成一串随机数字,成为

待排序的一串数字,在该模式下生成各种排序算法的交换次数和执行时间。 2.1.2 条件与限制

硬件环境:客户PC机,主频1.8GHZ以上,内存512M以上,硬盘80G以上

软件环境:Win XP,VC6.0,Adobe Flash CS3 2.2 功能需求

2.2.1 功能描述

(1)系统可以对各种内部排序的方法进行动态可视化的演示;

(2)系统具有两种模式:单步演示,用于教学和认知排序过程;统计模式,可以

生成大规模数据验证各种算法的时间性能;

2

动态排序算法演示软件设计

(3)要求实现的排序算法有:直接插入排序,Shell排序,表插入排序,冒泡排序,

快速排序,选择排序,堆排序等;

(4)在单步演示模式下,可以统计数据交换的次数。 2.2.2 功能模块图

图2-1 功能模块图2.3 模块功能与处理流程

各模块功能及处理流程如下表所示

表2-1 选择系统模式

模块编号模块名称模块标识

1 Welcome Interface 选择系统模式

输入处理输出

系统模式编号判断输入系统模式界面

3

动态排序算法演示软件设计

表2-2 选择教学模式模块编号模块名称模块标识 2 Educational Mode 选择教学模式

输入处理输出排序算法编号依据输入判断相应算法的排序过程和交换次数

表2-3 选择统计模式模块编号模块名称模块标识 3 Statistics Mode 选择统计模式

输入处理输出排序算法编号调用相应的统计程序交换次数和交换时间表2-4 随机数生成模块编号模块名称模块标识 4 Product Random Number 随机数生成

输入处理输出数据规模n 调用随机数生成程序数据规模为n的随机数txt文件

表2-5 数据统计模块编号模块名称模块标识 5 Statistic Data 数据统计输入处理输出模块3的输出图表表示输入数据的处理生成图表

表2-6 数据保存模块编号模块名称模块标识 6 Save Data 数据保存

输入处理输出模块3输出文件写入 Txt格式文件

4

动态排序算法演示软件设计

表2-7 直接插入排序演示模块编号模块名称模块标识 7 StraightInsertionSort 直接插入排序演示

输入处理输出待排序数组演示排序过程交换次数

表2-8 希尔排序演示模块编号模块名称模块标识 8 ShellSort 希尔排序演示

输入处理输出无演示排序过程无

表2-9 归并排序演示模块编号模块名称模块标识 9 MergeSort 归并排序演示

输入处理输出待排序数组演示排序过程无

表2-10 冒泡排序演示模块编号模块名称模块标识 10 BubbleSort 冒泡排序演示

输入处理输出待排序数组演示排序过程交换次数

表2-11 快速排序演示模块编号模块名称模块标识 11 QuickSort 快速排序演示

输入处理输出待排序数组演示排序过程交换次数

5

动态排序算法演示软件设计

表2-12 直接选择排序演示

模块编号模块名称模块标识

12 StraightSelectionSort 直接选择排序演示

输入处理输出

待排序数组演示排序过程交换次数

表2-13 堆排序演示

模块编号模块名称模块标识

13 HeapSort 堆排序演示

输入处理输出

待排序数组演示排序过程交换次数

2.4 功能需求与程序的关系

本条用一张如下的矩阵图说明各项功能需求的实现同各块程序的分配关系: 统计程序随机数生成程序数据格式转换文件读写统计程序

随机数生成 ? ?

数据导出 ? ?

数据保存 ? ?

统计交换次数 ? ?

执行时间计算 ? ?

图表生成 ? ?

表2-14 功能需求与程序的关系

2.5 内部排序算法

排序就是将记录按关键字递增(递减)的次序排列起来,形成新的有序序列。

内排序是指在排序过程中,所有元素调到内存中进行的排序。内排序是排序的基础。内排序效率用比较次数来衡量。按所用策略不同,内排序又可分为插入排序、选择排序、交换排序、归并排序及基数排序等几大类。

冒泡排序(Bubble Sort),首先将第一个记录的关键字和第二个记录的关键字进行比较,若为逆序,则将两个记录交换之,然后比较第二个记录和第三个记录的关键字。以此类推,直至第n-1个记录和第n个记录的关键字进行过比较为止。上述过程称做第一趟冒泡排序,其结果使得关键字最大的记录被安置到最后一个记录的位置上。然后进

6

动态排序算法演示软件设计

行第二趟冒泡排序,对前n-1个记录进行同样操作,其结果是使关键字次大的记录被安置到第n-1个记录的位置上。

选择排序(Selection Sort),第一趟,从n个记录中找出关键码最小的记录与第一个记录交换;第二趟,从第二个记录开始的n-1个记录中再选出关键码最小的

记录与第二个记录交换;如此,第i趟,则从第i个记录开始的n-i+1个记录中选出关键码最小的记录与第i个记录交换,直到整个序列按关键码有序。

直接插入排序(Straight Insertion Sort)是一种最简单的排序方法,它的基本操作是将一个记录插入到已排好序的有序表中,从而得到一个新的、记录数增1的有序表。

希尔排序(Shell’s Sort),先取一个小于n的整数d1作为第一个增量,把文件的全部记录分成d1个组。所有距离为d1的倍数的记录放在同一个组中。现在各组内进行直接插入排序;然后,取第二个增量d2.该方法的实质上是一种分组插入方法。

,k2,…,kn称为堆,当且仅当该序列满堆排序(Heap Sort),n个关键字序列k1

足如下性质(简称为堆性质):(1)ki?k2i且ki?k2i+1或(2)ki?k2i且

ki?k2i+1。若将此序列所存储的向量R[1..n]看作是一棵完全二叉树的存储结构,则堆实质上是满足如下性质的完全二叉树:树中任一非叶结点的关键字均不大于(或不小于)其左右孩子(若存在)结点的关键字。根结点的关键字是堆里所有结点关键字中最小者的堆称为小根堆;根结点的关键字是堆里所有结点关键字中最大者的堆称为大根堆。

快速排序(Quick Sort)是对起泡排序的一种改进。它的基本思想是,通过一趟排序将待排记录分割成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序。

归并排序(Merging Sort)是又一类不同的排序方法。“归并”的含义是将两个或两

[4]个以上的有序表组合成一个新的有序表。

2.6 Flash动画技术

Flash是由美国的 Macromedia 公司推出的一款多媒体动画制作软件,它是一种创作工具,设计人员和开发人员可使用它来创建演示文稿、应用程序和其他允许用户交互的内容。Flash 可以包含简单的动画、视频内容、复杂演示文稿和应用程序以及介于它们之间的任何内容。通常,使用 Flash 创作的各个内容单元称为应用程序,即使它们可能只是很简单的动画。也可以通过添加图片、声音、视频和特殊效果,构建包含丰富媒

[5]体的 Flash 应用程序。

2.6.1 Flash动画原理

Flash动画的制作过程主要有,输入和编辑起始和终止关键帧;计算和生成中间帧;定义和显示运动路径;交互式给画面上色;产生一些特技效果;实现画面与声音的同步;控制运动系列的记录等,其中自动计算生成中间帧就是Flash的精髓了。

7

动态排序算法演示软件设计

2.6.2 Flash cs3简介

Flash软件可以实现多种动画特效,动画都是由一帧帧的静态图片在短时间内连续播放而造成的视觉效果,是表现动态过程、阐明抽象原理的一种重要媒体。尤其在医学CAI课件中,使用设计合理的动画,不仅有助于学科知识的表达和传播,使学习者加深对所学知识的理解,提高学习兴趣和教学效率,同时也能为课件增加生动的艺术效果,特

[6]别对于以抽象教学内容为主的课程更具有特殊的应用意义。

2.6.3 ActionScript

ActionScrip是针对Adobe Flash Player运行时环境的编程语言,它在Flash 内容和应用程序中实现了交互性、数据处理以及其它许多功能。

Flash使用ActionScript给动画添加交互性。在简单动画中,Flash按顺序播放动画中的场景和帧,而在交互动画中,用户可以使用键盘或鼠标与动画交互。例如,可以单击动画中的按钮,然后跳转到动画的不同部分继续播放;可以移动动画中的对象;可以在表单中输入信息等等。使用ActionScript可以控制Flash动画中的对

[7]象,创建导航元素和交互元素,扩展Flash创作交互动画和网络应用的能力。 3 系统设计

3.1 数据定义

输入数据:

由于大多数排序算法的时间开销主要是关键字之间的比较和记录的移动,算法的执行时间不仅依赖于问题的规模,还取决于输入实例中数据的状态。所以对于输入数据,我们采用由用户输入记录的个数和选择数据规模。

输出数据:

输入关键字分别用直接插入排序,直接选择排序,冒泡排序,shell排序,快速排序,堆排序这些排序方法进行排序,输出关键字的比较次数和移动次数,以及统计不同数据规模的交换次数。

3.2 程序流程图

程序流程如图3-1所示

3.3 系统结构设计

系统分为两种模式:单步演示(教学)模式,统计模式。系统结构如图3-2所示3.3.1 单步演示模式

用于教学和认知排序过程,在此模式下,用户选择一种排序算法,对一串数字的排序过程动态显示出来。用户再选择使用的排序算法,然后系统会动态的呈现整个算法的

8

动态排序算法演示软件设计

图3-1 程序流程图

排序算法动态演示系统

教学模式统计模式插希选冒快归选显入尔择泡速并择示排排排排排排数统序序序序序序据计演演演演演演规数示示示示示示模据

图3-2 软件结构图

执行过程即该算法的交换过程,供用户的教学和认知。同时在交换的过程中统计交换次

9

动态排序算法演示软件设计

数。

单步演示包括直接插入排序、希尔排序、直接选择排序、冒泡排序、快速排序、归并排序等六个演示模块。

3.3.2 统计模式

在此模式下,用户可选择不同大小的数据规模,进行排序计算,并生成各种排序算法的交换次数和执行时间,以柱状图表示出来。

统计模式包括数据规模选择和显示统计数据,可供选择的数据规模有50,500,5000,10000,20000个。

3.4 接口设计

3.4.1 用户接口

图形用户界面,用户点击功能按钮,系统做出相应的响应。

3.4.2 外部接口

Flash软件调用可执行程序的API接口。

3.4.3 内部接口

各个模块之间功能相对独立,程序在逻辑上没有联系。各模块之间的数据联系通过对文件的读写来实现。

4 系统实现

4.1 AS实现排序算法

4.1.1 直接插入排序演示

直接插入排序实现:

1.从第一个元素开始,该元素可以认为已经被排序

2.取出下一个元素,在已经排序的元素序列中从后向前扫描

3.如果该元素(已排序)大于新元素,将该元素移到下一位置

4.重复步骤3,直到找到已排序的元素小于或者等于新元素的位置

5.将新元素插入到该位置中

6.重复步骤2

4.1.2 希尔排序演示

增量的选择将影响希尔排序的效率。但是无论怎样选择增量,最后一定要使增量为1,进行一次直接插入排序。但它相对于直接插入排序,由于在子表中每进行一次比较,就可能移去整个经性表中的多个逆序,从而改善了整个排序性能。希尔排序算是一种基于插入排序的算法,所以对数据有序敏感。

10

动态排序算法演示软件设计

4.1.3 直接选择排序演示

选择排序是这样实现的:

1.首先在未排序序列中找到最小元素,存放到排序序列的起始位置

2.然后,再从剩余未排序元素中继续寻找最小元素,然后放到排序序列末尾。

3.以此类推,直到所有元素均排序完毕。

4.1.4 冒泡排序演示

冒泡排序是这样实现的:

1. 首先将所有待排序的数字放入工作列表中。

2. 从列表的第一个数字到倒数第二个数字,逐个检查:若某一位上的数字大于他的下一位,则将它与它的下一位交换。

3. 重复2号步骤(倒数的数字加1。例如:第一次到倒数第二个数字,第二次到倒数第三个数字,依此类推...),直至再也不能交换。

4.1.5 快速排序演示

[8]快速排序使用分治法策略来把一个序列分为两个子序列。

步骤为:

1. 从数列中挑出一个元素,称为 "基准"(pivot),

2. 重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分割之后,该基准是它的最后位置。这个称为分割(partition)操作。

相关主题
相关文档
最新文档