好玩的舞動排序算法

原文地址:http://www.admin10000.com/document/211.html
原文鏈接有視頻舞動演示

在計算機中,排序算法有很多,包括插入排序,堆排序,歸併排序,選擇排序,計數排序,基數排序,桶排序,快速排序等。插入排序,堆排序,選擇排序,歸併排序和快速排序都是比較排序,它們通過對數組中的元素進行比較來實現排序,其他排序算法則是利用非比較的其他方法來獲得有關輸入數組的排序信息。

  下面是 admin10000.com 整理的視頻案例來介紹選擇,冒泡,插入,歸併,快速和希爾排序。視頻由 Sapientia University 創作,他們以舞蹈的方式演繹各種排序算法,創意無限,非常精彩。

  一、選擇排序 select sort

  選擇排序(Selection sort)是一種簡單直觀的排序算法。它的工作原理如下。首先在未排序序列中找到最小元素,存放到排序序列的起始位置,然後,再從剩餘未排序元素中繼續尋找最小元素,然後放到排序序列末尾。以此類推,直到所有元素均排序完畢。

  算法思路:

  每一次從待排序的數據元素中選出最小的一個元素,順序放在已排好序的數列的最後,直到全部待排序的數據元素排完。

  算法描述:

  1、第一輪排序,在無序區中選出最小的記錄,將它與無序區的第1個記錄交換,使有序區記錄個數增加1個(即記錄個數變爲1個),無序區記錄個數減少1個。

  2、第二輪排序,在無序區中選出最小的記錄,將它與無序區的第1個記錄交換,使有序區記錄個數增加1個(即記錄個數變爲2個),無序區記錄個數減少1個。

  3、如此下去,重複以上過程,直至最終完成排序。

  二、冒泡排序 Bubble Sort

  冒泡排序(Bubble Sort)是一種簡單的排序算法。它重複地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。這個算法的名字由來是因爲越小的元素會經由交換慢慢“浮”到數列的頂端。

  算法思路:

  依次比較相鄰的兩個數,將小數放在前面,大數放在後面。由於在排序過程中總是小數往前放,大數往後放,相當於氣泡往上升,所以稱作冒泡排序。

  設想被排序的數組垂直豎立,將每個數據元素看作有重量的氣泡(爲了便於理解,此處規定大數對應輕氣泡),根據輕氣泡不能在重氣泡之下的原則,從下往上掃描數組,凡掃描到違反本原則的輕氣泡,就使其向上“漂浮”,如此反覆進行,直至最後任何兩個氣泡都是輕者在上,重者在下爲止。

  算法描述:

  1、在第一輪,首先比較第1個和第2個數,將小數放前,大數放後;然後比較第2個數和第3個數,將小數放前,大數放後,如此繼續,直至比較最後兩個數,將小數放前,大數放後。至此第一輪結束,將最大的數放到了最後。

  2、在第二輪,仍從第一對數開始比較(因爲可能由於第2個數和第3個數的交換,使得第1個數不再小於第2個數),將小數放前,大數放後,一直比較到倒數第二個數(倒數第一的位置上已經是最大的),第二輪結束,在倒數第二的位置上得到一個新的最大數(其實在整個數列中是第二大的數)。

  3、如此下去,重複以上過程,直至最終完成排序。

  三、插入排序 Insert sort

  插入排序(Insertion Sort)的算法描述是一種簡單直觀的排序算法。它的工作原理是通過構建有序序列,對於未排序數據,在已排序序列中從後向前掃描,找到相應位置並插入。插入排序在實現上,通常採用in-place排序(即只需用到O(1)的額外空間的排序),因而在從後向前掃描過程中,需要反覆把已排序元素逐步向後挪位,爲最新元素提供插入空間。

  算法思路:

  假定一個數組的序是排好的,然後從前往後,如果有數比當前外層元素的值大,則將這個數的位置往後挪,直到當前外層元素的值大於或等於它前面的位置爲止。這種算法在排完前k個數之後,可以保證前k個元素是局部有序的,保證了插入過程的正確性。

  算法描述:

  1、從第一個元素開始,該元素可以認爲已經被排序。

  2、取出下一個元素,在已經排序的元素序列中從後向前掃描。

  3、如果該元素(已排序)大於新元素,將該元素移到下一位置。

  4、重複第3步,直到找到已排序的元素小於或者等於新元素的位置。

  5、將新元素插入到下一位置中。

  6、重複第2步。

  四、歸併排序 Merge sort

  歸併排序(Merge sort)是建立在歸併操作上的一種有效的排序算法。該算法是採用分治法(Divide and Conquer)的一個非常典型的應用。

  算法思路:

  將兩個或兩個以上有序表合併成一個新的有序表,即把待排序序列分爲若干個子序列,每個子序列是有序的。然後再把有序子序列合併爲整體有序序列。

  算法描述:

  1、申請空間,使其大小爲兩個已經排序序列之和,該空間用來存放合併後的序列。

  2、設定兩個指針,最初位置分別爲兩個已經排序序列的起始位置。

  3、比較兩個指針所指向的元素,選擇相對小的元素放入到合併空間,並移動指針到下一位置。

  4、重複第3步,直到某一指針達到序列尾。

  5、將另一序列剩下的所有元素直接複製到合併序列尾。

  五、快速排序 Quick sort

  快速排序(Quick sort)是對冒泡排序的一種改進。由C. A. R. Hoare在1962年提出。它的基本思想是:通過一趟排序將要排序的數據分割成獨立的兩部分,其中一部分的所有數據都比另外一部分的所有數據都要小,然後再按此方法對這兩部分數據分別進行快速排序,整個排序過程可以遞歸進行,以此達到整個數據變成有序序列。

  算法思路:

  通過一輪排序將要排序的數據分割成獨立的兩部分,其中一部分的所有數據都比另外一部分的所有數據都要小,然後再按此方法對這兩部分數據分別進行快速排序,整個排序過程可以遞歸進行,以此達到整個數據變成有序序列。

  算法描述:

  1、設置兩個變量i、j,排序開始的時候,i是第一個元素的下標,j是最後一個元素的下標。

  2、從第j個元素開始向前搜索,即由後開始向前搜索,找到第一個小於第i個元素的數,設其下標爲m,第i個元素與第m個元素交換。

  3、從第i個元素開始向後搜索,即由前開始向後搜索,找到第一個大於第m個元素的數,設其下標爲n,第m個元素與第n個元素交換。

  4、重複第2步和第3步,直到m與n相等,則第一輪排序結束,確定下來的一個元素將數組分割成獨立的兩部分,對這獨立的兩部分再進行快速排序,直至最終完成排序。

  六、謝爾排序 Shell sort

  希爾排序(Shell Sort),也稱遞減增量排序算法,是插入排序的一種高速而穩定的改進版本。希爾排序是基於插入排序的以下兩點性質而提出改進方法的:插入排序在對幾乎已經排好序的數據操作時, 效率高, 即可以達到線性排序的效率,但插入排序一般來說是低效的, 因爲插入排序每次只能將數據移動一位。

  算法思路:

  取一個小於數組元素個數的整數作爲第一個增量,把數組的全部元素分組,同一組中的所有元素下標距離均爲增量的倍數,先在各組內進行直接插入排序。然後,取第二個增量小於第一個增量重複上述的分組和排序,直至所取的增量等於1,即所有元素放在同一組中進行直接插入排序爲止。

  算法描述:

  1、取一個小於數組元素個數的整數d1作爲第一個增量,把數組的全部元素分成d1個組,所有距離爲d1的倍數的記錄放在同一個組中。在各組內進行直接插入排序。

  2、取第二個增量d2<d1重複上述的分組和排序。

  3、取更小的增量重複上述的分組和排序,直至所取的增量dt=1(dt<dt-1<……<d2<d1),即所有記錄放在同一組中進行直接插入排序爲止。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章