讓程序員抓狂的排序算法教學視頻

jopen 10年前發布 | 26K 次閱讀 排序算法

羅馬尼亞是一個愛跳舞的民族,如果你看過羅馬尼亞老電影《奇普里安.博隆貝斯庫》,那歡快悠揚的舞曲之熾熱呵,非把你融化不可!

羅馬尼亞人愛跳舞,不僅體現在電影和節日中,你會發現舞蹈無處不在,即使是大學里的計算機課程中的排序算法教學,也被用舞蹈的形式表現出來。

羅馬尼亞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/

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!