Scratch插入排序演算法

排序演算法是程式設計考試中最常見的題目,幾乎所有的筆試和麵試都會考到,因為它體現的就是程式設計師的演算法基礎和邏輯思維能力,經常看《電腦報》的讀者們都知道,我們已經講了多種排序演算法比如氣泡排序、選擇排序、桶排序……

那麼大家有沒有思考一個問題為什麼有要那麼多種的排序演算法呢?首先是因為排序的思路是具有多樣性的,從不同的角度解決排序問題,就會產生不同的排序方法。另外,不同的排序演算法各有優勢和劣勢,當資料規模不同時,可以選擇合適的排序演算法。

今天就和大家分享一個新的排序演算法“插入排序”,插入排序分為前插序和後插序,它的基本思想是將陣列的第一個數認為是有序陣列,從後往前或者從前往後掃描該有序陣列,把陣列中剩餘n-1個數,根據數值大小,有序插入到前面序列中,直至陣列所有數有序排列為止。這樣的話,n個元素只需要進行n-1趟排序,比多數排序演算法的效率更高。

Scratch插入排序演算法

例如有一組數列為【53、27、36、15、69、42】。首先對於待排序陣列中第一個元素53認定為有序元素,所以排序從第二個元素27開始。第一次排序時從有序數列中查詢27插入的位置。27小於53應插入在53之前,此時將27提取出來後,將53後移,將27放入原53點位置,便完成了第一次排序。

第二次排序的時候從有序序列中找36的插入位置。36小於53,大於27,36的插入位置在27與53之間。此時將36提取出來後,將53後移,再將36放入原53所在位置,便完成了第二次的排序。

剩餘的數字15、69、42的排序過程相同,找到合適的位置透過移動、插入的方法完成排序。最終的排序數列結果為【15、27、36、42、53、69】總計五次排序。

瞭解了插入排序的執行過程和思路後,我們可以嘗試著用Scratch將程式碼拼搭出來。首先新建兩個列表用於存放原始數列和排序後的數列,開始時將序列中所有的內容全部清空。透過重複執行的方法,將1-50之間的隨機數新增入原數列列表中(隨機數的範圍和重複執行的次數可自定義)。

Scratch插入排序演算法

其次新建 “處理中”和“已排序”兩個關鍵變數。由於插入排序是從第二項開始,所以變數“處理中”表示需要插入排序的數列的序列位置。變數“已排序”代表數列中已經完成排序的數列組從第一項開始的,一直重複執行直到處理中的項數大於數列項數的總和便可跳出迴圈。在迴圈中,將需要處理的數和已排序數列中的數字進行比較大小,透過比較大小將處理中的數字插入到合適的位置。處理中的數永遠都排在已排序數列後的下一個數字,同時處理中的數字跟隨著迴圈每次加一,直至迴圈數列末尾,排序結束。

Scratch插入排序演算法

插入排序的優點就是穩定,速度快,但是比較次數不一定,比較次數越少,插入點後的資料移動越多,特別是當資料總量龐大的時候,需要用連結串列解決這個問題。

TAG: 排序53數列2736