簡學:數據排序問題

所謂排序,就是使一串數字,按照遞增或遞減的排列起來的操作。排序算法,就是如何使得數據按照要求排列的方法。

簡學:數據排序問題

假設有一個無序數列:{7,3,9,2,5,1,8},將其按從小到大的順序排列。

方案1:冒泡排序;

冒泡排序就像汽水中的許多小氣泡,不斷的飄到上面來。這是因為組成小氣泡的二氧化碳比水要輕,所以小氣泡可以一點一點向上浮動。其思想就是把相鄰的元素兩兩比較,根據大小來交換元素的位置,過程如下:

簡學:數據排序問題

根據上表不斷的重複比較,當某一輪比較,所有元素都未發生位置變動,即表明排序完成。

方案2:雞尾酒排序;

雞尾酒排序是將冒泡排序的一個改動,其思想是第一輪從左到右,尋找最大元素,第二輪是從右到左,尋找最小元素,其適用於序列中有一段數據有一定的排序規律。過程如下:

簡學:數據排序問題

同樣當某一輪比較,所有元素都未發生位置變動,即表明排序完成。

方案3:快速排序;

冒泡排序是在每一輪只把一個元素冒泡到數列的一端,而快速排序則是利用分治法的思想在每一輪挑選一個基準元素,並讓其他比它大的元素移動到數列一邊,比它小的元素移動到數列的另一邊,從而把數列拆解成了兩個部分。

其中基準元素的選擇,有多種方法,可以選擇第一個元素作為基準元素,也可以每次隨機選擇一個元素作為基準元素。基準元素的選擇影響著分治的效果,假設基準元素選擇的剛好是最大元素或者最小元素,則分治將沒有任何意義。

選定了基準元素以後,要做的就是把其他元素當中小於基準元素的都移動到基準元素一邊,大於基準元素的都移動到基準元素另一邊。

定義三個指針:L指向最左元素=1,R指向最右元素=7,I指向基準元素=1,X代表一個坑,基準元素是第一個坑。

簡學:數據排序問題

方案4:計數排序

建立數組Array={a0,a1,a2,,,,a9},將序列值作為數組的下標,依次對相對應的下標計數,a0到a9初始值為0;

簡學:數據排序問題


分享到:


相關文章: