羅馬尼亞人愛跳舞,不僅體現在電影和節日中,你會發現舞蹈無處不在,即使是大學裡的計算機課程中的排序演算法教學,也被用舞蹈的形式表現出來。
羅馬尼亞Tirgu Mures地區的Sapientia大學就製作了一系列用民族舞蹈形式表現的各種排序演算法的工作原理。下面就是這些視訊。
舞跳的很好,但教學效果如何,我很難評判,至少讓我對這幾種排序演算法的效率產生了嚴重的懷疑。
排序演算法:選擇排序法
選擇排序(Selection sort)是一種簡單直觀的排序演算法。它的工作原理如下。首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然後,再從剩餘未排序元素中繼續尋找最小(大)元素,然後放到已排序序列的末尾。以此類推,直到所有元素均排序完畢。
選擇排序的主要優點與資料移動有關。如果某個元素位於正確的最終位置上,則它不會被移動。選擇排序每次交換一對元素,它們當中至少有一個將被移到其最終位置上,因此對n個元素的表進行排序總共進行至多n-1次交換。在所有的完全依靠交換去移動元素的排序方法中,選擇排序屬於非常好的一種。
排序演算法:希爾排序法
希爾排序,也稱遞減增量排序演算法,是插入排序的一種更高效的改進版本。希爾排序是非穩定排序演算法。
希爾排序是基於插入排序的以下兩點性質而提出改進方法的:
1.插入排序在對幾乎已經排好序的資料操作時, 效率高, 即可以達到線性排序的效率
2.但插入排序一般來說是低效的, 因為插入排序每次只能將資料移動一位
排序演算法:氣泡排序法
氣泡排序(Bubble Sort,臺灣譯為:泡沫排序或氣泡排序)是一種簡單的排序演算法。它重複地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。這個演算法的名字由來是因為越小的元素會經由交換慢慢“浮”到數列的頂端。
氣泡排序對n個專案需要O(n^2)的比較次數,且可以原地排序。儘管這個演算法是最簡單瞭解和實作的排序演算法之一,但它對於少數元素之外的數列排序是很沒有效率的。
排序演算法:快速排序法
快速排序是由東尼·霍爾所發展的一種排序演算法。在平均狀況下,排序 n 個專案要Ο(n log n)次比較。在最壞狀況下則需要Ο(n2)次比較,但這種狀況並不常見。事實上,快速排序通常明顯比其他Ο(n log n) 演算法更快,因為它的內部迴圈(inner loop)可以在大部分的架構上很有效率地被實現出來。
排序演算法:歸併排序法
歸併排序(Merge sort,臺灣譯作:合併排序)是建立在歸併操作上的一種有效的排序演算法。該演算法是採用分治法(Divide and Conquer)的一個非常典型的應用。
排序演算法:插入排序法
插入排序(Insertion Sort)的演算法描述是一種簡單直觀的排序演算法。它的工作原理是通過構建有序序列,對於未排序資料,在已排序序列中從後向前掃描,找到相應位置並插入。插入排序在實現上,通常採用in-place排序(即只需用到O(1)的額外空間的排序),因而在從後向前掃描過程中,需要反覆把已排序元素逐步向後挪位,為最新元素提供插入空間。
本文轉載自:http://www.vaikan.com/sort-dance/
相關閱讀
評論(1)