?

基于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數據庫系統中的編程與應用
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合