基于Unity3D 的冒泡排序算法动态可视化设计及实现

2021-03-12 15:23马晓萍
喀什大学学报 2021年6期
关键词:柱状图控件排序

马晓萍

(喀什大学 计算机科学与技术学院,新疆喀什 844000)

0 引言

冒泡排序是一种典型的、稳定排序算法[1],对初次接触程序语言的学习者来说,排序算法比较抽象,对算法的理解存在较大的障碍。如何让学生更好直观的理解排序算法的原理并用程序语言实现,是一个值得研究的问题。Unity3D 是一款实时3D 互动内容创作和运营平台,所提供的可视化、实时三维动画等类型互动内容[2],具有强大的交互功能和丰富的三维表现。利用Unity3D 实现冒泡排序算法动态可视化,是一种有效的算法可视化方式,可促进学习者对冒泡排序算法的理解。

1 冒泡排序

1.1 冒泡排序原理

在程序设计语言的排序算法中,冒泡排序是一种平方级的原地排序算法[3]。冒泡排序算法的原理:在待排序的一组数中,将相邻的两个数值进行比较,若前面的数值比后面的数值大就交换两数,把小数值放在前面,否则不交换;直至最终完成从小到大的排序。[4]

1.2 C#语言实现

冒泡排序算法的程序描述(C#语言)如下:

上述代码中,通过外层for循环,用数组的长度控制整体程序的运行次数,内层for用于与前后两位数比较大小,如果存在第一个数比第二个数大,则两个数利用中间变量temp,实现交换的逻辑。

2 基于Unity3D 的冒泡排序算法可视化设计及实现

2.1 冒泡排序三维动态可视化设计

在Unity 中设计由一个Panel 容器控件,一个Text 文本控件,两个Button 按钮控件组成的UI 界面。Text控件文本内容为“冒泡排序法三维动态可视化”,当单击“随机生成数据”按钮时,在Panel 容器控件上逐个动态生成随机数据柱状图效果,此案例中随机生成9 个1~100 的整数,并产生以该整数作为动态柱状图的高度。当单击“开始冒泡排序”按钮时,在Panel 容器控件上,开始进行柱状图动态数据的交换,准备比较的两个柱状图变成绿色,等待排序比较,进行完一轮比较后所产生的最大数柱状图变成红色。

2.2 实现随机生成数据及动态生成效果

2.2.1 随机排序数据类的设计

(1)设计一个RandomData 类用于生成随机数。如图1所示。

图1 RandomData类图

部分代码如下:

(2)利用协程机制动态生成柱状图的接口设计.

该接口中,go.GetComponent<Transform>().position 语句表示动态生成柱状图的位置,t.Get-Component<Transform>().position 语句表示随机产生数据的文本显示在当前柱状图y 轴上方v.y+0.5位置。通过测试,Unity中无法直接调用接口,为了实现接口InitBarGraph()和接口Sort()的功能,本案例中编写了两个方法,使用StartCall()方法分别调用接口。调用接口InitBarGraph()参考代码如下:

动态生成随机柱状图效果图如下图2所示。

图2 随机柱状图

2.2.2 冒泡排序类的设计

(1)冒泡排序及柱状图颜色变化的接口设计。

该接口主要实现设置准备比较的两个柱状图颜色、待排数的柱状图颜色,最大数的柱状图颜色,以及进行柱状图动态数据的交换的冒泡排序功能,程序流程图如图3所示。

图3 可视化冒泡排序流程图

部分代码如下:

(2)柱状图的位置和高度的方法。

该方法用以实现柱状图、柱状图上随机数数字的位置和高度的设置,使得数据始终显示在柱状图正上方的功能。

部分代码如下:

(3)实现第一轮冒泡排序的效果图如图4 所示。

图4 第一轮冒泡排序效果图

3 结语

本文利用Unity3D 平台,以“C#程序设计”课程中的冒泡排序为案例,利用协程动态生成随机数据柱状图,并以三维动态可视化实现C#脚本语言的冒泡排序算法,直观动态地展示了冒泡排序算法的基本思想和排序过程。实验证明,动态可视化的课程设计,既通过Unity3D 创建三维动态互动内容提高了学习者的学习兴趣,又加深了学习者对冒泡排序算法原理的理解性,达到了良好的教学效果。

猜你喜欢
柱状图控件排序
作者简介
基于.net的用户定义验证控件的应用分析
恐怖排序
节日排序
关于.net控件数组的探讨
高中地理图像图表题解析技巧之管窥
由科研论文中一个柱状图引发的编辑思考
基于Android平台的柱状图组件的设计实现
基于嵌入式MINIGUI控件子类化技术的深入研究与应用
Spreadsheet控件在Delphi数据库系统中的编程与应用