
使用 App Inventor 實作「氣泡排序法」
排序是常見的資料處理,在這裡要來介紹一種簡單的排序法:「Bubble Sort(氣泡排序法)」,並以 App Inventor 來實作。
氣泡排序法實作步驟:
- 第一輪先從索引碼為 1 的元素開始 (通常是從索引碼為 0 開始,但是 Inventor 清單的第一項資料的索引碼為 1。),將相鄰的兩個元素做比較,如果前面的元素比後面的元素大,就把兩個元素對調。這樣數值較大的元素會漸漸地往後移,第一輪結束後,陣列的最後一個元素,一定是最大的。
- 接著重複上述的動作,因為第一輪結束後,最後一位一定是最大的,所以第二輪開始,只要比較到倒數第二位即可,第二輪結束後,倒數第二位就是第二大的數。後面以此類推,假如陣列有八筆資料,比較只要跑七輪即可。
以底下資料為例:
78 71 58 19 44 94 57 82

排序完後資料為:「19 44 57 58 71 78 82 94」。
以 Inventor 實作,建立一個新專案「BubbleSort」
畫面編排如下,拉一個按鈕元件和兩個標籤元件。

切換到「程式設計」
1. 請拖拉兩個變數方塊,名稱分別為「data」和「temp」,data 右邊請放建立空清單(這裡要放排序的資料),temp 右邊請放數字 0 (要放置暫存的變數)。
2. 再來請拖拉「當 Screen1 初始化」的方塊,裡面放一個 for 迴圈方塊,範圍從 1 到 8,每次增加 1。(這樣迴圈內的程式碼會重複執行 8 次)
3. 迴圈內請放「增加清單項目」的方塊,右邊有兩格可以放,清單格請放變數 data,item格 請放「隨機取整數」方塊,範圍從 1 到 100。
4. 程式拼圖如下:

撰寫 Bubble Sort 的副程式

副程式裡要放兩個迴圈方塊,第一個迴圈控制要比較幾輪,假如清單有八筆資料,迴圈範圍就要設為七次,第二個迴圈控制數值比較次數,範圍從 1 開始,跟著第一個迴圈跑,因為第一輪結束後,最右邊一定是最大的數,所以第二輪在比較時,最後一個數就不用再比較了;然後第二個迴圈裡面要放「判斷方塊」,假如前面的資料比後面大,就要將兩個數值對調。完整程式方塊如下:

最後請拖拉按鈕執行的方塊,方塊裡放「呼叫副程式」的方塊。
aia 檔案下載
這裡再附 Java 程式碼以供參考:BubbleSort.java
完整程式碼

App 執行畫面
如果覺得文章內容還不錯的話,麻煩請幫我點個讚!感謝
可以多點幾次喔~~
第一次點讚需使用 Google 或 Facebook 帳號註冊
